docker弹性search容器不转发端口

我有一个容器设置来运行elasticsearch。 该服务启动,但我无法通过curl或浏览器连接到它。

RUN \ cd /tmp && \ wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch- 1.3.2.tar.gz && \ tar xvzf elasticsearch-1.3.2.tar.gz && \ rm -f elasticsearch-1.3.2.tar.gz && \ mv /tmp/elasticsearch-1.3.2 /elasticsearch # Define mountable directories. VOLUME ["/data"] # Define default command. CMD ["/elasticsearch/bin/elasticsearch"] EXPOSE 9200 EXPOSE 9300 

连接到http://localhost:9200不会产生任何结果。 dockerps显示端口;

  0.0.0.0:49179->9200/tcp, 0.0.0.0:49180->9300/tcp ... net::ERR_ADDRESS_UNREACHABLE 

我错过了一些configuration值? 谢谢!

[更新]我也在运行命令中尝试了-p

  docker run -i -p 9200:9200 -p 9300:9300 -t --rm -P team1/image1 

我testing了你的Dockerfile,但它正常。

 FROM dockerfile/java RUN \ cd /tmp && \ wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.3.2.tar.gz && \ tar xvzf elasticsearch-1.3.2.tar.gz && \ rm -f elasticsearch-1.3.2.tar.gz && \ mv /tmp/elasticsearch-1.3.2 /elasticsearch # Define mountable directories. VOLUME ["/data"] # Define default command. CMD ["/elasticsearch/bin/elasticsearch"] EXPOSE 9200 EXPOSE 9300 

我尝试构build这个Dockerfile并运行它。

 $ docker build -t 25312935 . $ docker run -t -p 9200:9200 -p 9300:9300 --rm 25312935 [2014-08-15 04:41:08,349][INFO ][node ] [Black Crow] version[1.3.2], pid[1], build[dee175d/2014-08-13T14:29:30Z] [2014-08-15 04:41:08,349][INFO ][node ] [Black Crow] initializing ... [2014-08-15 04:41:08,353][INFO ][plugins ] [Black Crow] loaded [], sites [] [2014-08-15 04:41:10,444][INFO ][node ] [Black Crow] initialized [2014-08-15 04:41:10,444][INFO ][node ] [Black Crow] starting ... [2014-08-15 04:41:10,547][INFO ][transport ] [Black Crow] bound_address {inet[/0:0:0:0:0:0:0:0:9300]}, publish_address {inet[/172.17.0.72:9300]} [2014-08-15 04:41:10,560][INFO ][discovery ] [Black Crow] elasticsearch/0mpczYoYSZCiAmbkxcsfpg [2014-08-15 04:41:13,601][INFO ][cluster.service ] [Black Crow] new_master [Black Crow][0mpczYoYSZCiAmbkxcsfpg][eeb3396b1ecc][inet[/172.17.0.72:9300]], reason: zen-disco-join (elected_as_master) [2014-08-15 04:41:13,615][INFO ][http ] [Black Crow] bound_address {inet[/0:0:0:0:0:0:0:0:9200]}, publish_address {inet[/172.17.0.72:9200]} [2014-08-15 04:41:13,615][INFO ][node ] [Black Crow] started [2014-08-15 04:41:13,634][INFO ][gateway ] [Black Crow] recovered [0] indices into cluster_state 

如下所示,请求127.0.0.1:9200返回json响应。

 $ curl 127.0.0.1:9200 { "status" : 200, "name" : "Black Crow", "version" : { "number" : "1.3.2", }, "tagline" : "You Know, for Search" } 

检查你的-p选项。 这意味着公布容器的端口主机。 如果你不明确写主机的端口,docker分配如下的随机端口。

 $ docker run -t -p 9200 -p 9300 --rm 25312935 $ docker ps -l CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1aa4c2c84d04 25312935:latest /elasticsearch/bin/e 15 seconds ago Up 15 seconds 0.0.0.0:49153->9200/tcp, 0.0.0.0:49154->9300/tcp sad_shockley 

0.0.0.0:49153->9200/tcp 9200/ 0.0.0.0:49153->9200/tcp表示可以通过主机的49153端口访问容器的9200端口。

 $ curl 127.0.0.1:49153 { "status" : 200, "name" : "Golem", "version" : { "number" : "1.3.2", }, "tagline" : "You Know, for Search" } 

因此,如果要使用主机s 9200 port, explicitly write the host port like -p 9200:9200 or -p 0.0.0.0:9200:9200

 $ docker ps -l CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES eeb3396b1ecc 25312935:latest /elasticsearch/bin/e 59 seconds ago Up 58 seconds 0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp high_elion 

如果这仍然不起作用,请尝试使用--net=host选项。 您可以使用此选项使用容器内的主机networking堆栈。

 $ docker run -t --net=host --rm 25312935 $ curl 127.0.0.1:9200 { "status" : 200, "name" : "Black Crow", "version" : { "number" : "1.3.2", }, "tagline" : "You Know, for Search" } 

如果两者都不起作用,我认为你需要检查你的其他networkingconfiguration。

如果您在OSX上运行docker,请注意,主机实际上是初始化boot2docker时安装的VirtualBox实例。 所以在这种情况下,而不是使用:

curl http://localhost:9200

find使用的虚拟框实例的IP,我将其表示为VM_IP:

boot2docker ip

然后尝试:

curl http://<VM_IP>:9200

在Docker容器中运行Elasticsearch时,我遇到了端口转发的问题。 我通过手动指定绑定Elasticsearch服务器docker run --rm -p 9200:9200 -p 9300:9300 --name=es elasticsearch:latest -Des.network.host=0.0.0.0接口来解决问题docker run --rm -p 9200:9200 -p 9300:9300 --name=es elasticsearch:latest -Des.network.host=0.0.0.0

绑定部分的-Des.network.host=0.0.0.0-Des.network.host=0.0.0.0 。 我在https://mad.is/2016/09/running-elasticsearch-in-docker-container/上写了一篇详细的博客文&#x7AE0;