【发布时间】:2021-06-07 20:09:24
【问题描述】:
我无法使用桥接网络从容器 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 和 nftables 与 iptables-nft 之间切换。当我尝试运行k3d 示例集群时,整个问题就开始了。我正在使用官方包在 Arch 上运行所有内容。
【问题讨论】:
-
一般 IPTABLES 支持是题外话。支持问题可通过superuser.com 提出。
标签: docker networking iptables archlinux