繁体   English   中英

为什么 Synology docker 容器无法 ping 通其主机 IP?

[英]Why can't Synology docker container ping its host IP?

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

观察:对此进行调查,我发现我可以从容器 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 [...] Ethe.net adapter Ethe.net: Connection-specific DNS Suffix. : home Link-local IPv6 Address. . . . . : [...] IPv4 Address. . . . . . . . . . . : 192.168.1.101 Su.net 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 冲突:正在连接的 Bridge.network 容器正在运行 su.net 172.17.0.0/16 ,因此与 LAN su.net 没有冲突。 我还检查了与其他容器的冲突。

我没有对我的 Synology docker package 做任何特别的调整,一切都是开箱即用的(除了我在那里安装的)。 我不使用甚至尝试在盒子上配置 swarm 或 Kube.netes。 只是 docker。

我没办法。 为什么我无法 ping / 连接到主机 IP?

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM