调查Docker连接问题

时间:2018-06-06 15:35:12

标签: docker networking

我正试图从运行在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

  1. 根据建议我登录到容器并检查DNS。主机名已正确解析:

    root@55add56ecc11:/# ping host-x.com
    PING s1-host-x.com (172.22.187.101) 56(84) bytes of data.
    
  2. 但是,不会传递ping包。我虽然这可能是由内部docker网络和企业网络(172.17.X.X)中的IP范围冲突引起的。我尝试在我的守护程序配置中修复docker bridge IP地址并重新检查连接但它没有帮助:

    "bip" : "10.10.10.1/8"
    
  3. 我和我公司的其他3人一起检查过(包括我在内共有4人)。 50%可以访问此主机(在线),50%没有(离线)。

  4. 我尝试了@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  
    
  5. 我尝试追踪路线但没有成功:

    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  * * *
    
  6. 我该如何调查?

2 个答案:

答案 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地址的请求。