gpt4 book ai didi

java - 如何使用TransportClient连接到在正式Docker镜像中运行的ElasticSearch?

转载 作者:行者123 更新时间:2023-12-02 22:23:03 25 4
gpt4 key购买 nike

(首先,我知道Can not connect to elasticsearch container in docker。我的问题仍然存在。)

我在ElasticSearch上大吃一惊。

我有run the official Docker image from the command line as described in the official documentation,将cluster.name指定为elasticsearch(文档声称这是默认的,但是检查发现它实际上默认是docker-cluster):

$ docker run -p 9200:9200 -p 9300:9300 -e "http.host=0.0.0.0" -e "transport.host=127.0.0.1" -e "xpack.security.enabled=false" -e "cluster.name=elasticsearch" docker.elastic.co/elasticsearch/elasticsearch:5.4.2

您会注意到我有 disabled the X-Pack security, following official documentation

您会注意到,我同时暴露了端口9200和端口9300。

将浏览器指向 http://localhost:9200/_cat/health的结果是:
1498166019 21:13:39 docker-cluster yellow 1 1 3 3 0 0 3 0 - 50.0%

…这并不能使我充满信心,但是我想这就是您遵循 official documentation进行操作时所得到的。

无论如何,接下来,我将使用Java构建 Client,如下所示:
this.client = new PreBuiltTransportClient(Settings.builder()
.put("cluster.name", "elasticsearch")
.put("client.transport.sniff", true)
.build())
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300));

您会注意到,我已将 127.0.0.1指定为主机名(与 transport.host属性匹配),并且将 9300指定为端口(与公开端口匹配)。

然后我运行: this.client.prepareGet("argle", "bargle", "1").get();。我期望看到某种“嘿,假人, argle不存在”错误。

相反,这导致了可怕的后果:
NoNodeAvailableException[None of the configured nodes are available: [{#transport#-1}{q00tH2RKTlCkXut03lYHOg}{127.0.0.1}{127.0.0.1:9300}]]

我究竟做错了什么?官方文档的哪一部分不正确?

最佳答案

官方文档希望您将Docker环境变量transport.host设置为127.0.0.1。而是需要将其设置为0.0.0.0

因此,为了测试目的,为了连接到官方的ElasticSearch Docker镜像,您需要像这样运行它:

$ docker run -p 9200:9200 -p 9300:9300 -e "http.host=0.0.0.0" -e "transport.host=0.0.0.0" -e "xpack.security.enabled=false" docker.elastic.co/elasticsearch/elasticsearch:5.4.2

群集名称将是 docker-cluster(而不是 elasticsearch)(与文档中所告知的相反)。因此,这意味着与文档所描述的相反,您需要像这样构建Java客户端:
this.client = new PreBuiltTransportClient(Settings.builder()
.put("cluster.name", "docker-cluster")
.build())
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300));

此外,您不得将client.transport.sniff设置为true如果使用此配置将其设置为 true,则会得到原始异常。

关于java - 如何使用TransportClient连接到在正式Docker镜像中运行的ElasticSearch?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44709297/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com