docker:端口映射不适用于非默认机器

在玩docker我发现了一些奇怪的东西(至less对我来说)。 我创build了一个容器:

 docker run -p 8080:80 nginx 

而且无论我尝试什么。 我从http://localhost:8080看不到任何东西。 最后我发现我做到了

 eval $(docker-machine env foo) 

并切换到另一台机器。 当切换回默认机器时,HTTP服务器再次正常工作。

有人可以解释为什么这是?

我正在使用Mac 1.12的Docker。

我可以从你的信息中猜测你正在使用Docker工具箱(可能是VirtualBox)。 Docker工具箱创build一个Linux主机(基于boot2docker映像),并在主机中运行你的nginx容器。 -p 8080:80会将nginx中的端口80导出到主机上的 8080。 因此,要从您的计算机访问它,您需要使用http:// HOST-IP-ADDRESS:8080 。

您可以使用docker-machine ls来查找您的主机IP

Docker工具箱的另一种select是使用Docker for Mac或Docker for Windows(google他们)。 这些删除了VirtualBox的需要。 您的计算机实际上成为运行Docker容器的主机。 在这种情况下,运行http://localhost:8080会给你你的nginx服务器。