我在计算机上运行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:9000
,localhost:32768
和172.17.0.2:9000
无效。如何连接到Docker镜像中运行的服务器?
答案 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: