(首先,我知道Can not connect to elasticsearch container in docker。我的問題仍然存在。)如何使用TransportClient連接到官方Docker鏡像中運行的ElasticSearch?
我在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}]]
我在做什麼錯?官方文檔的哪部分是不正確的?