Docker不会发布选定的端口

我创build了一个在Docker上运行ElasticSearch的容器(发布了9200和9300,因此可以通过主机访问它们)。

$ docker run --name books-es -p 9200:9200 -p 9300:9300 -d elasticsearch 65937a0f8967390d33abaad50b55975cb9292be6692d29791c2e6c37ac5d2832 

然后我testing它是否正在运行:

 $ docker exec books-es curl 127.0.0.1:9200 % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 315{ 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 "name" : "Masque", "cluster_name" : "elasticsearch", "version" : { "number" : "2.0.0", "build_hash" : "de54438d6af8f9340d50c5c786151783ce7d6be5", "build_timestamp" : "2015-10-22T08:09:48Z", "build_snapshot" : false, "lucene_version" : "5.2.1" }, "tagline" : "You Know, for Search" } 100 315 0 0 5204 0 --:--:-- --:--:-- --:--:-- 5625 

我确定了我的docker的IP地址。

 $ docker-machine ip default 192.168.99.100 

但从这里testing服务器时,没有反应。

 $ curl 192.168.99.100:9200 curl: (7) Failed to connect to 192.168.99.100 port 9200: Connection refused 

有任何想法吗?

确保ElasticSearch在ip 0.0.0.0而不是127.0.0.1上侦听。
由于docker exec books-es curl 127.0.0.1:9200作品,这似乎是问题。

您可以尝试映射显式端口192.168.99.100:9200:9200

确保设置正确的环境variables:

 eval $(docker-machine ip default) 

如果这不起作用,请尝试:

  • 端口映射在VM级别

     VBoxManage controlvm "default" --natpf1 "tcp-port9200,tcp,,9200,,9200" VBoxManage controlvm "default" --natpf1 "udp-port9200,udp,,9200,,9200" 
  • curl 127.0.0.1:9200