【问题标题】:Why can't Synology docker container ping its host IP?为什么 Synology docker 容器无法 ping 其主机 IP?
【发布时间】:2020-07-18 09:04:31
【问题描述】:

情况:我有一个在 docker 容器内运行的服务,该服务托管在 DSM 包管理器中提供的官方 Synology docker 包中。此服务需要 http-connect 到另一个服务,该服务不在 docker 中运行,但恰好托管在同一台 Synology 主机上(相同的 LAN IP 地址)。与服务的 http 连接始终超时。

Obervations: 对此进行调查,我发现我可以从容器 ping 局域网上的任何其他 IP(例如 192.168.1.4),但可以 ping 到容器的主机 IP (192.168.1.2)超时。我的防火墙启用了 ICMP。

问题:为什么容器ping不通主机IP?

示例:以下简单示例总结了问题:

root@synology# docker run --name test -ti ubuntu /usr/bin/env sh
# apt-get update
[...]
# apt-get install iputils-ping
[...]
# ping 192.168.1.4
PING 192.168.1.4 (192.168.1.4) 56(84) bytes of data.
64 bytes from 192.168.1.4: icmp_seq=1 ttl=63 time=0.309 ms
64 bytes from 192.168.1.4: icmp_seq=2 ttl=63 time=0.420 ms
64 bytes from 192.168.1.4: icmp_seq=3 ttl=63 time=0.316 ms
^C
--- 192.168.1.4 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2001ms
rtt min/avg/max/mdev = 0.309/0.348/0.420/0.050 ms
# ping 192.168.1.2
PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.
^C
--- 192.168.1.2 ping statistics ---
5 packets transmitted, 0 received, 100% packet loss, time 3999ms

# exit

我尝试了什么:

  1. 从 shell 直接在主机上运行 Ping 主机 IP - 有效:
      root@synology# ping 192.168.1.2
      PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.
      64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.044 ms
      64 bytes from 192.168.1.2: icmp_seq=2 ttl=64 time=0.023 ms
      ^C
      --- 192.168.1.2 ping statistics ---
      2 packets transmitted, 2 received, 0% packet loss, time 999ms
      rtt min/avg/max/mdev = 0.023/0.033/0.044/0.012 ms
    
  2. 禁用防火墙 - 无效,仍然无法从容器内部 ping 192.168.1.2
  3. 在我的 Windows 桌面 (192.168.1.101) 上运行相同 - 从该机器上 Docker 桌面中托管的 docker 容器 ping 到 192.168.1.101 回声就好了:
      d:\>ipconfig
      [...]
      Ethernet adapter Ethernet:
    
      Connection-specific DNS Suffix  . : home
      Link-local IPv6 Address . . . . . : [...]
      IPv4 Address. . . . . . . . . . . : 192.168.1.101
      Subnet Mask . . . . . . . . . . . : 255.255.255.0
      Default Gateway . . . . . . . . . : 192.168.1.1
      [...]
      d:\>docker run --name test -ti ubuntu /usr/bin/env sh
      [...]
      # whoami
      root
      # apt-get update
      [...]
      # apt-get install iputils-ping
      [...]
      # ping 192.168.1.101
      PING 192.168.1.101 (192.168.1.101) 56(84) bytes of data.
      64 bytes from 192.168.1.101: icmp_seq=1 ttl=37 time=0.627 ms
      64 bytes from 192.168.1.101: icmp_seq=2 ttl=37 time=2.51 ms
      64 bytes from 192.168.1.101: icmp_seq=3 ttl=37 time=1.51 ms
      ^C
      --- 192.168.1.101 ping statistics ---
      3 packets transmitted, 3 received, 0% packet loss, time 2041ms
      rtt min/avg/max/mdev = 0.627/1.548/2.509/0.768 ms
      # exit
    
  4. 检查内部 IP 冲突:桥接网络容器正在连接到正在运行的子网 172.17.0.0/16,因此不会与 LAN 子网发生冲突。我还检查了与其他容器的冲突。

我没有对我的 Synology docker 包进行任何特殊调整,所有东西都是开箱即用的(除了我在那里安装的)。我没有使用,甚至没有尝试在盒子上配置 swarm 或 Kubernetes。只是码头工人。

我束手无策。为什么我无法 ping / 连接到主机 IP?

【问题讨论】:

    标签: docker networking synology


    【解决方案1】:

    在我的新 Synology 上遇到了完全相同的问题,在寻找解决方案时,我遇到了这个问题。幸运的是,我可以解决我系统上的问题,这只是一个复选标记,我不小心启用了多个网关。 此设置位于控制面板>网络>高级设置

    只需取消选中它即可在我的系统上解决它

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-28
      相关资源
      最近更新 更多