java - 从在 docker 容器中运行的 elasticsearch 客户端连接 elasticsearch 集群(即非 dockerized)

标签 java elasticsearch tcp docker

我正在从在 docker 容器中运行的 elasticsearch 客户端连接到 elasticsearch 集群(即非 dockerized)。我可以通过在客户端中进行设置来做到这一点:

Settings settings = ImmutableSettings.settingsBuilder()
                .put("node.name", "HelloESClient")
                .put("discovery.zen.ping.multicast.enabled", false)
                .put("discovery.zen.ping.unicast.hosts", "172.16.11.50")
                .put("transport.publish_port", "9300")
                .put("transport.publish_host", "192.168.17.131");

其中192.168.17.131:9300是host ip: 暴露给elasticsearch集群连接节点客户端的端口。

我无法在主机中公开任何其他端口,因为 9300 端口是在 elasticsearch config yml 中设置为 tcp 传输端口的端口。

这个问题是我无法启动多个具有连接到同一个 elasticsearch 集群的 elasticsearch 客户端的 docker 容器,因为每个容器都不能在同一台机器上公开相同的端口。

最佳答案

docker run -d -p 9300:9300 --name es1 elasticsearch
docker run -d -p 9301:9300 --name es2 elasticsearch
docker run -d -p 9302:9300 --name es3 elasticsearch
docker run -d -p 9303:9300 --name es4 elasticsearch

现在你有 4 个 elasticsearch 容器

关于java - 从在 docker 容器中运行的 elasticsearch 客户端连接 elasticsearch 集群(即非 dockerized),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38345344/

相关文章:

linux - Linux 端口中每秒的请求数

java - 从具有值的 fragment B 返回到 fragment A

java - 使用正则表达式将所有短语集替换为最后一个短语?

elasticsearch - 如何从字段中获取特定大小的结果?

c++ - sfml 中已连接客户端的端口

Java 通过 TCP 发送对象

java - 设置者,为什么这不起作用?

Java泛型列表返回类型

elasticsearch - Logstash没有在ElasticSearch中插入记录

python - 无法为 Wagtail 设置 Elasticsearch