如何调试 Mac 上 Docker 设置的网络——可能是 Hyperkit 引起的问题?

How do I debug a network -- probably Hyperkit caused issue -- of a Docker setup on a Mac?

问题:网络没有路由到主机。 例如:

docker run -tip 80:8080  httpd

不会导致 apache 在主机上的 localhost:8080 或 docker.local:8080 或类似的任何东西上响应。如果我尝试从内部连接,容器工作正常:

docker run -ti debian    
curl 172.17.0.2
<html><body><h1>It works!</h1></body></html>

看来Docker这边本身就一切正常。 在 docker ps 你得到:... 80/tcp, 0.0.0.0:80->8080/tcp ...

环境: 全新、干净的 OS 安装 - OSX Sierra 10.12.2,Docker.app 版本 1.13.0 稳定(加上1.13.0.beta 和 1.12.0 beta 也尝试过,结果相同)。

假设: Docker 和 OS 之间有些东西坏了。我猜这个 'something' 是 Hyperkit(对我来说就像一个黑盒子)。此处的构建脚本可能会破坏一些设置:http://bigchaindb-examples.readthedocs.io/en/latest/install.html#the-docker-waydocker-machine 为中心,我可能低估了这一事实。有趣的是,这是一个新安装:这个构建脚本是我对它所做的第一件事——我不知道之前网络是否真的有效。

问题:我该如何诊断这个东西。我希望能够追踪到流量丢失的确切位置并相应地修复它。

您的命令行端口颠倒了:

docker run -tip 8080:80 httpd

首先是主机端口,有一个可选的绑定接口,然后是容器端口。您还可以在 docker ps 输出中看到主机上的端口 80 映射到容器内的端口 8080。

另一个问题是容器内的服务需要监听所有容器接口(0.0.0.0),而不是容器的本地主机接口,否则代理无法将流量转发给它。但是,官方图像的默认设置不会出现此问题,并且您的 curl 命令显示不适用于您。