2017-06-22 10 views
1

(まず、私はCan not connect to elasticsearch container in dockerを認識しています。私の問題は残ります)TransportClientを使用して公式のDockerイメージで実行されているElasticSearchに接続するにはどうすればよいですか?

私はElasticSearchでタイヤを蹴っています。

私はcluster.nameelasticsearchとして(デフォルトですが、検査が実際にデフォルトでdocker-clusterすることを明らかにドキュメントの主張)を指定し、run the official Docker image from the command line as described in the official documentationをしました:

$ 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

あなたはhttp://localhost:9200/_cat/healthでブラウザを指しての結果である9300

私はポート9200とポートの両方を公開しましたことに注意しましょう:

自信を持って私を満たしていない
1498166019 21:13:39 docker-cluster yellow 1 1 3 3 0 0 3 0 - 50.0% 

...しかし、それはあなたが得るものです。私は、official documentationに従って物事を実行すると思います。

いずれにせよ、次の、Javaを使用して、私はそうのような Clientを構築した時

:あなたは、私がホスト名(transport.hostプロパティに一致する)として127.0.0.19300などを指定した注意しましょう

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)); 

ポート(公開されたポートと一致)。

次に実行します。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}]] 

?公式文書のどの部分が間違っていますか?

答えて

1

公式ドキュメントでは、transport.host Docker環境変数を127.0.0.1に設定する必要があります。代わりに0.0.0.0に設定する必要があります。

だから、テストの目的のために公式ElasticSearchドッカーイメージに接続するために、あなたはこのようにそれを実行する必要があります。

$ 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 

クラスタ名があること、逆になるドキュメントがyou-が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)); 

また、あなたはtrueclient.transport.sniffセットを持っていてはいけません。この設定でtrueに設定すると、元の例外が発生します。

0

私の場合、「xpack.security.enabled = false」が解決策でした。

elasticsearch: 
    image: docker.elastic.co/elasticsearch/elasticsearch:5.4.1 
    ports: 
    - 9200:9200 
    - 9300:9300 
    container_name: elasticsearch 
    ulimits: 
    memlock: 
     soft: -1 
     hard: -1 
    mem_limit: 1g 
    environment: 
    - cluster.name=docker-cluster 
    - node.name=one 
    - bootstrap.memory_lock=false 
    - xpack.security.enabled=false 
    - "ES_JAVA_OPTS=-Xms512m -Xmx512m" 
    - network.publish_host=192.168.99.100 
    - transport.publish_port=9300 
    volumes: 
    - /usr/share/elasticsearch/data 

elasticsearch2: 
    image: docker.elastic.co/elasticsearch/elasticsearch:5.4.1 
    ports: 
    - 9201:9200 
    - 9301:9300 
    container_name: elasticsearch2 
    ulimits: 
    memlock: 
     soft: -1 
     hard: -1 
    mem_limit: 1g 
    environment: 
    - cluster.name=docker-cluster 
    - node.name=two 
    - bootstrap.memory_lock=false 
    - xpack.security.enabled=false 
    - "ES_JAVA_OPTS=-Xms512m -Xmx512m" 
    - network.publish_host=192.168.99.100 
    - transport.publish_port=9301 
    - "discovery.zen.ping.unicast.hosts=192.168.99.100" 
    - "discovery.zen.minimum_master_nodes=2" 
    volumes: 
    - /usr/share/elasticsearch/data 
関連する問題