docker:端口映射在非默认机器上不起作用

docker: port mapping not working on non default machine

在玩 docker 时,我发现了一些奇怪的东西(至少对我而言)。我通过以下方式创建了一个容器:

docker run -p 8080:80 nginx

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

eval $(docker-machine env foo)

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

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

我正在为 Mac 1.12 使用 Docker。

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

您可以使用 docker-machine ls

找到您的主机 IP

Docker 工具箱的替代方法是对 Mac 使用 Docker 或对 Windows 使用 Docker (google 它们)。这些消除了对 VirtualBox 的需要。您的计算机实质上成为 运行 docker 容器的主机。在那种情况下,运行 http://localhost:8080 会给你的 nginx 服务器。