我无法使用桥接网络从容器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-nft
在iptables
和nftables
之间切换。当我尝试运行k3d
示例集群时,整个问题就开始了。我正在使用官方软件包运行Arch上的所有内容。
我终于找到了
NetworkManager和systemd-networkd都在我的系统上运行,这通过多个DHCP服务扰乱了接口IP。这导致网桥网络无法正常工作,进而扰乱了容器流量。
专业提示:不要运行多个守护程序试图做相同的事情
如果您有
net.ipv4.ip_forward=1 ,请检查
cat/etc/sysctl.conf