Docker容器访问父服务器中的本地主机

我的Docker容器有点问题。 我试图通过curl从容器访问到我的父服务器本地主机,以执行查询在elasticsearch。 Elastic只在父级服务器上工作。

curl http://127.0.0.1:9200 curl: (7) Failed to connect to 127.0.0.1 port 9200: Connection refused 

容器IP为172.17.0.3,并能够从父服务器ping容器

它是我的docker构build

 cd ./api_docker container="$(docker ps | grep "visitors/api:gniewoy" | cut -d " " -f1)" git reset --hard HEAD && git pull && composer update && docker build -t visitors/api:gniewoy . && cd ../ docker kill $container && docker run -p 705:80 --env-file docker_api_env -d /etc/docker/ 

build成后,continer在705端口工作正常,但只是弹性问题。 以下是我的conainer的deatils

 "NetworkSettings": { "Bridge": "", "SandboxID": "", "HairpinMode": false, "LinkLocalIPv6Address": "", "LinkLocalIPv6PrefixLen": 0, "Ports": { "443/tcp": null, "80/tcp": [ { "HostIp": "0.0.0.0", "HostPort": "705" } ] }, "SandboxKey": "", "SecondaryIPAddresses": null, "SecondaryIPv6Addresses": null, "EndpointID": "", "Gateway": "172.17.0.1", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "IPAddress": "172.17.0.3", "IPPrefixLen": 16, "IPv6Gateway": "", "MacAddress": "", "Networks": { "bridge": { "IPAMConfig": null, "Links": null, "Aliases": null, "NetworkID": "", "EndpointID": "", "Gateway": "172.17.0.1", "IPAddress": "172.17.0.3", "IPPrefixLen": 16, "IPv6Gateway": "", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "MacAddress": "" } } } 

我正在使用Debian 8.谢谢

您需要通过-p标记共享端口,如-p 9200:9200

这里第一个9200是内部端口,第二个是集装箱端口。

看看这个

你的configuration需要是/etc/elasticsearch/elasticsearch.yml

 network : host : 127.0.0.1 //or ifconfig (ex eth0 : IP) 

在主机上达到回送的唯一方法是在同一回路networking上。 默认情况下,docker将在自己的独立networking命名空间中运行你的容器,其中包括自己独立的回送接口。 要使用主机的环回(以及主机的其他networking堆栈)运行,您可以调用:

 docker run --net host ... 

使用docker-compose.yml,您可以在相关服务中包含以下部分:

 network_mode: "host" 

如果你可以configuration你的弹性服务器来监听所有的接口,那么从容器方面来说更好(尽pipe这可能会带来其他的安全问题)。 然后,您将从容器中连接到主机上的非回送IP。