如何连接到Docker容器中运行的服务器?

时间:2015-11-11 15:46:45

标签: macos docker

我在计算机上运行Docker容器。此容器包含一个Java应用程序,用于启动侦听http://localhost:9000的服务器。当我在没有Docker的情况下运行此代码时,连接到服务器是微不足道的,但是在Docker容器内运行时我遇到了一些连接问题。我的docker run命令如下所示:

docker run -p 9000 -t -i my-image

NetworkSettings的{​​{1}}输出如下所示:

docker inspect

我尝试连接到"NetworkSettings": { "Bridge": "", "SandboxID": "f9c77b7ae7804583fa60211b7d8cfeec5f154b29f9d174a4f0cdb5a8d6e41126", "HairpinMode": false, "LinkLocalIPv6Address": "", "LinkLocalIPv6PrefixLen": 0, "Ports": { "9000/tcp": [ { "HostIp": "0.0.0.0", "HostPort": "32768" } ] }, "SandboxKey": "/var/run/docker/netns/f9c77b7ae780", "SecondaryIPAddresses": null, "SecondaryIPv6Addresses": null, "EndpointID": "10b80d9de186be6ddf9e9d3bb1945124ec1fab7774a135720569e2bf4db3306e", "Gateway": "172.17.0.1", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "IPAddress": "172.17.0.2", "IPPrefixLen": 16, "IPv6Gateway": "", "MacAddress": "02:42:ac:11:00:02", "Networks": { "bridge": { "EndpointID": "10b80d9de186be6ddf9e9d3bb1945124ec1fab7774a135720569e2bf4db3306e", "Gateway": "172.17.0.1", "IPAddress": "172.17.0.2", "IPPrefixLen": 16, "IPv6Gateway": "", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "MacAddress": "02:42:ac:11:00:02" } } } localhost:9000localhost:32768172.17.0.2:9000无效。如何连接到Docker镜像中运行的服务器?

2 个答案:

答案 0 :(得分:1)

如果您是On OSX,那意味着您正在为Docker环境使用VirtualBox VM。

确保您拥有forwarded your port 9000到您的实际主机(Mac),以便从localhost可以看到该端口。
这适用于旧的boot2docker或新的docker机器。

VBoxManage controlvm "boot2docker-vm" --natpf1 "tcp-port9000 ,tcp,,9000,,9000"
VBoxManage controlvm "boot2docker-vm" --natpf1 "udp-port9200 ,udp,,9000,,$9000

controlvm如果VM正在运行,则modifyvm是VM已停止)
(将“boot2docker-vm”替换为您的虚拟机的名称:请参阅docker-machine ls
(使用-p 9000:9000依赖于静态端口映射)

答案 1 :(得分:1)

您可以尝试从VirtualBox主机环境访问容器。 使用-p 9000:9000选项运行容器:

docker run -p 9000:9000 -t -i my-image

然后运行docker-machine找出docker host的IP:

docker-machine ip default

然后从上面的命令输出访问您的Java应用程序。例如,如果它是192.168.99.100:

http://192.168.99.100:9000