我正试图从运行在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
我在我的Mac上从docker容器运行它,用于其他目标主机:
$ 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 * * *
我该如何调查?
答案 0 :(得分:0)
可能是您的防火墙(pf)阻止了它。检查主机上的防火墙规则并检查路由。
答案 1 :(得分:0)
很有可能是路线问题。检查路线表
ip r
要么
netstat -rn
在docker容器和您的主机中。通过在容器中运行ip a
命令来确保更改了bip,该命令的地址应在BIP范围内。另外,也许您的新Bip范围10.10.10.1也与公司网络冲突。在这种情况下,您应该联系网络管理员,并询问他应该为Docker容器选择哪个网络。主机host-x.com也可能阻止来自您的Docker容器IP地址的请求。