我正在尝试从在 MacOS 上运行的 docker 容器访问 host-x.com,但它失败了:
$ docker run ubuntu:latest \
/bin/bash -c \
'apt-get update &&
apt-get -y install netcat &&
nc -v -z -w 3 host-x.com 443 &> /dev/null && echo "Online" || echo "Offline"'
Offline
它在以下情况下正常工作:
我在另一台机器上运行一个 docker 容器:
Online
我在我的 Mac 上运行它,在 docker 容器之外:
nc -v -z -w 3 host-x.com 443 &> /dev/null && echo "Online" || echo "Offline"' Online
我从 docker 容器在我的 Mac 上运行它,用于其他目标主机:
$ docker run ubuntu:latest \ /bin/bash -c \ 'apt-get update && apt-get -y install netcat && nc -v -z -w 3 www.google.com 443 &> /dev/null && echo "Online" || echo "Offline"' Online
更新 #1
按照建议,我登录到容器并检查了 DNS。主机名已正确解析:
root@55add56ecc11:/# ping host-x.com PING s1-host-x.com (172.22.187.101) 56(84) bytes of data.
但是,不会发送 ping 包。我虽然这可能是由内部 docker 网络和公司网络(172.17.X.X)中的 IP 范围冲突引起的。我尝试在我的守护进程配置中修复 docker bridge IP 地址并重新检查连接,但没有帮助:
"bip" : "10.10.10.1/8"
我与公司中的其他 3 人(包括我在内共 4 人)进行了核实。 50% 可以访问此主机(在线),50% 不能(离线)。
我尝试了@mko 的建议,在容器内以交互模式使用 netcat。仍然超时。
root@37c61acc5aa5:/# nc -v -z -w 3 host-x.com 443 s1-host-x.com [172.22.187.101] 443 (?) : Connection timed out
我尝试追踪路线但没有成功:
traceroute -m 10 -w 1 host-x.com traceroute to host-x.com (172.22.187.101), 10 hops max, 60 byte packets 1 10.10.10.1 (10.10.10.1) 0.444 ms 0.388 ms 0.364 ms 2 * * * 3 * * * 4 * * * 5 * * * 6 * * * 7 * * * 8 * * * 9 * * * 10 * * *
我该如何调查?
最佳答案
很可能是路线的问题。检查路由表
知识产权
或者
网络统计 -rn
在 docker 容器和您的主机内。确保通过在容器内运行 ip a
命令应用了您对 bip 的更改,它的地址应该在您的 BIP 范围内。此外,您的新 bip 范围 10.10.10.1 也可能与公司网络发生冲突。在这种情况下,您应该联系您的网络管理员并询问他应该为您的 docker 容器选择哪个网络。也有可能主机 host-x.com 正在阻止来自您的 docker 容器 IP 地址的请求。
关于docker - 调查 Docker 连接问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50724314/