我有一个运行Nginx的容器:# docker run --name mynginx1 -P -d nginx;
# docker run --name mynginx1 -P -d nginx
并通过docker ps以下方式获取了其端口信息: 0.0.0.0:32769->80/tcp, 0.0.0.0:32768->443/tcp
docker ps
0.0.0.0:32769->80/tcp, 0.0.0.0:32768->443/tcp
然后,我可以从容器中获取响应(ID:c30991a04b2f):
docker exec -i -t c3099 bash
curl http://localhost=>返回默认index.html页面内容,它可以正常工作
curl http://localhost
index.html
但是,当我curl http://localhost:32769在容器的外部制作时,得到了以下信息:
curl http://localhost:32769
curl: (7) failed to connect to localhost port 32769: Connection refused
我在docker版本1.9.0的Mac上运行;Nginx最新
有谁知道是什么原因造成的?有什么帮助吗?谢谢
如果在OSX上,则可能是在docker环境中使用VirtualBox VM。
确保已将端口32769转发到您的实际主机(mac),以便该端口从本地主机可见。 这对于旧的boot2docker或新的docker计算机均有效。
VBoxManage controlvm "boot2docker-vm" --natpf1 "tcp-port32769 ,tcp,,32769,,32769" VBoxManage controlvm "boot2docker-vm" --natpf1 "udp-port32769 ,udp,,32769,,$32769
(controlvm如果虚拟机正在运行,modifyvm则该虚拟机是否已停止) (用boot2docker-vm您的虚拟机名称替换“ ”,请参见docker-machine ls)
controlvm
modifyvm
boot2docker-vm
docker-machine ls
我建议不要使用-P,而是使用静态端口映射-p xxx:80 -p yyy:443。 这样,您可以使用固定值一次执行该端口转发。
-P
-p xxx:80 -p yyy:443
当然,您可以直接通过 docker-machine ip vmname
docker-machine ip vmname
curl http://$(docker-machine ip vmname):32769