docker - 调查 Docker 连接问题

标签 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
    
  • 我从 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

  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  * * *
    

我该如何调查?

最佳答案

很可能是路线的问题。检查路由表 知识产权 或者 网络统计 -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/

相关文章:

docker - 如何在 Docker 镜像的 .bashrc 中设置别名

docker 容器上的 phantomJS

docker - docker 容器之间的连接超时

git - 从 GitHub 操作推送到源

azure - 1 个 VM 连接到 2 个 VNET?

networking - 第三层(网络层)如何识别IP地址?

docker - 如何指定在 Jenkinsfile 中安装了 docker 的节点类型?

C++ 为什么使用从 (std::string) 到 (void) 类型的隐式转换?

java - 使用 Netty 5 编码和解码多种不同类型

java - 在Java Socket中,DataInputStream没有完全读取数据