Docker创建了自己的桥,当有现有的桥时,两者似乎发生了碰撞。我亲身经历过,互联网上的多个来源都提到了这个问题。我看到的一个解决方案是让 Docker 使用现有的桥,这个说是因为 Docker 的规则搞乱了 KVM 的桥,并提供了下面的解决方案。
我的问题是,为什么这两个桥的配置会相互影响?一个网卡不能在一台电脑上拥有完全独立的两个网桥吗?也就是说,一个网桥的设置不会影响另一个网桥的网络。
$ sudo systemctl edit docker.service
[Service]
ExecStartPre=/bin/sh -c “/usr/sbin/iptables -D FORWARD -p all -i br0 -j ACCEPT || true”
ExecStartPre=/usr/bin/iptables -A FORWARD -p all -i br0 -j ACCEPT
$ sudo reboot
你在这里把事情搞混了。Docker 创建了一个仅包含来自正在运行的 docker 容器的所有 veth 接口的网桥 - 网桥本身不会触及您的物理网络接口。从您的 docker 容器到公共世界的通信是通过路由完成的,而不是通过桥接!
如果您尝试将物理网络接口添加到两个不同的独立网桥,那将是一个问题。在同一台 PC 上拥有一个 docker 网桥和不同的网桥不会造成问题。
但是你有一个不同的问题:docker 搞乱了内核设置,导致通过网桥(第 2 层)的数据包向上发送一层,以便通过数据包过滤器发送这些数据包,而桥接数据包通常不会做。看到这个问题,它有一个很好的答案,描述了码头工人和桥梁的问题......