docker集装箱港口映射问题

我想我错过了一些明显的东西,但我似乎无法破解这一个。 我正试图从一个docker容器中运行uwsgi的django应用程序将端口映射到我的本地Macintosh主机。 这是设置。

Mac 10.11使用virtualbox 5.0.10和docker 1.9.1运行docker-machine 0.5.1

我创build了一个服务器与docker机安装我的docker文件,并成功地build立了我的docker集装箱。 在容器中我有以下命令

# Port to expose EXPOSE 8000 

映射到通过容器内的uwsgi使用的端口。 当我把他的容器通过

 eval "$(docker-machine env dev)" docker-machine ip dev 192.168.99.100 docker run -P launch 

容器启动正确。 如果我进入容器并执行一个

 curl http://localhost:8000 

我得到我所期望的HTML。 在docker检查container_id的外部给我一个

  "Ports": { "8000/tcp": [ { "HostIp": "0.0.0.0", "HostPort": "32768" } ] }, 

所以我可以看到在192.168.99.100docker机主机上的映射到32768,从上述命令。 然而每当我尝试和curlhttp://192.168.99.100:32768

 curl http://192.168.99.100:32768 curl: (7) Failed to connect to 192.168.99.100 port 32768: Connection refused 

所以对此有什么想法? 一切都应该按照我的理解docker工作。

谢谢Craig

既然你正在运行一个VirtualBox虚拟机,我仍然build议在VirtualBox级别上映射端口,正如我在“ 如何将mysql工作台连接到在docker中运行mysql? ”中提到的那样。

 VBoxManage controlvm "boot2docker-vm" --natpf1 "tcp-port8000 ,tcp,,8000,,8000" VBoxManage controlvm "boot2docker-vm" --natpf1 "udp-port8000 ,udp,,8000,,8000" 

然后用明确的端口映射运行容器(而不是随机的-P)

 docker run -p 8000:8000 launch