具有网桥网络的Docker容器不能ping任何东西(即使是默认网关)



我无法使用桥接网络从容器ping任何东西(例如:docker run --network bridge --rm -it bash ping 8.8.8.8(。甚至不是容器的默认网关。

来自集装箱内部的ip route

bash-5.1# ip route
default via 172.17.0.1 dev eth0
172.17.0.0/16 dev eth0 scope link  src 172.17.0.2

来自我的机器的ip link

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eno1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN mode DEFAULT group default qlen 1000
link/ether 6c:02:e0:77:5a:c1 brd ff:ff:ff:ff:ff:ff
altname enp16s0
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DORMANT group default qlen 1000
link/ether a4:97:b1:86:f9:6b brd ff:ff:ff:ff:ff:ff
4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default
link/ether 02:42:bd:d0:fb:cc brd ff:ff:ff:ff:ff:ff
6: veth40b832a@if5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default
link/ether ba:e5:3a:88:e4:67 brd ff:ff:ff:ff:ff:ff link-netnsid 0

即使容器正在运行,docker0接口也会保持关闭状态。

brctl表明容器接口没有桥接到docker0:

bridge name bridge id       STP enabled interfaces
docker0     8000.0242bdd0fbcc   no

以下是iptables -S -t nat:的输出

-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-N DOCKER
-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
-A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER
-A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE
-A DOCKER -i docker0 -j RETURN

到目前为止,我已经尝试重新安装docker,并使用iptables-nftiptablesnftables之间切换。当我尝试运行k3d示例集群时,整个问题就开始了。我正在使用官方软件包运行Arch上的所有内容。

我终于找到了

NetworkManager和systemd-networkd都在我的系统上运行,这通过多个DHCP服务扰乱了接口IP。这导致网桥网络无法正常工作,进而扰乱了容器流量。

专业提示:不要运行多个守护程序试图做相同的事情

如果您有
net.ipv4.ip_forward=1 ,请检查
cat/etc/sysctl.conf

相关内容