如何调试 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-way 以 docker-machine
为中心,我可能低估了这一事实。有趣的是,这是一个新安装:这个构建脚本是我对它所做的第一件事——我不知道之前网络是否真的有效。
问题:我该如何诊断这个东西。我希望能够追踪到流量丢失的确切位置并相应地修复它。
您的命令行端口颠倒了:
docker run -tip 8080:80 httpd
首先是主机端口,有一个可选的绑定接口,然后是容器端口。您还可以在 docker ps
输出中看到主机上的端口 80 映射到容器内的端口 8080。
另一个问题是容器内的服务需要监听所有容器接口(0.0.0.0),而不是容器的本地主机接口,否则代理无法将流量转发给它。但是,官方图像的默认设置不会出现此问题,并且您的 curl 命令显示不适用于您。
问题:网络没有路由到主机。 例如:
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-way 以 docker-machine
为中心,我可能低估了这一事实。有趣的是,这是一个新安装:这个构建脚本是我对它所做的第一件事——我不知道之前网络是否真的有效。
问题:我该如何诊断这个东西。我希望能够追踪到流量丢失的确切位置并相应地修复它。
您的命令行端口颠倒了:
docker run -tip 8080:80 httpd
首先是主机端口,有一个可选的绑定接口,然后是容器端口。您还可以在 docker ps
输出中看到主机上的端口 80 映射到容器内的端口 8080。
另一个问题是容器内的服务需要监听所有容器接口(0.0.0.0),而不是容器的本地主机接口,否则代理无法将流量转发给它。但是,官方图像的默认设置不会出现此问题,并且您的 curl 命令显示不适用于您。