docker nginx容器没有收到来自外部的请求,连接被拒绝

use*_*623 7 port nginx request docker

我有一个运行的nginx容器:# docker run --name mynginx1 -P -d nginx;

并通过docker ps以下方式获得其PORT信息: 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:32769在容器外面制作时,我得到了这个:

curl: (7) failed to connect to localhost port 32769: Connection refused


我在带有docker版本1.9.0的mac上运行; nginx最新

有谁知道是什么原因造成的?有帮助吗?谢谢

Von*_*onC 5

如果您是On OSX,则可能正在为docker环境使用VirtualBox VM.

确保已将端口32769转发到实际主机(mac),以便从localhost可以看到该端口.
这适用于旧的boot2docker或新的docker机器.

VBoxManage controlvm "boot2docker-vm" --natpf1 "tcp-port32769  ,tcp,,32769,,32769"
VBoxManage controlvm "boot2docker-vm" --natpf1 "udp-port32769 ,udp,,32769,,$32769
Run Code Online (Sandbox Code Playgroud)

(controlvm如果VM正在运行,modifyvm则VM是否已停止)
(将" boot2docker-vmvm的名称替换为" :请参阅docker-machine ls)

我建议不要使用-P,而是静态端口映射-p xxx:80 -p yyy:443.
这样,您可以使用固定值执行一次端口转发.

当然,您可以直接访问VM docker-machine ip vmname

curl http://$(docker-machine ip vmname):32769
Run Code Online (Sandbox Code Playgroud)