我正在使用 docker compose 创建相当复杂的 docker 容器基础设施。这些容器在 4 个不同的网络中运行(类似于我模仿的生产环境)。
Docker Compose 为我创建了这四个网络,并且一切正常,因为容器不会尝试与不同网络内的其他容器进行通信。当他们这样做时,连接就会断开。
我能够找出它被删除的原因,这是因为 Docker 将 iptables 规则添加到 DOCKER-ISOLATION 链中。
例子:
-A DOCKER-ISOLATION -i br-be010eaddd0e -o br-f788f16ed0dd -j DROP
-A DOCKER-ISOLATION -i br-f788f16ed0dd -o br-be010eaddd0e -j DROP
我写了一个小脚本,删除了我想要删除的规则(并允许所选网桥之间的通信),一切都像魅力一样工作,但不知何故,它们在某些时候由 Docker 重新创建,即使没有重新创建这些网络,所以它需要我再次运行该脚本,这非常烦人。
有什么方法可以明确告诉 Docker 允许两个网桥之间进行通信吗?或者也许有一些技巧可以在使用 Docker-Compose 启动容器后运行特定的 shell 脚本?
如果有人感兴趣,我已经设法用 iptables 来处理这个问题。解决方案是明确允许桥接子网之间的通信(假设它们具有固定的 IP 地址)。执行此操作的方法是发出以下命令(假设网桥子网为 172.24.131.0/24 和 172.24.132.0/24):
iptables -I FORWARD -s 172.24.131.0/24 -d 172.24.132.0/24 -j ACCEPT
iptables -I FORWARD -d 172.24.131.0/24 -s 172.24.132.0/24 -j ACCEPT
这样,我们就在 DOCKER-ISOLATION 之前在 FORWARD 链中添加新规则,它会强制 iptables 忽略这些子网之间的任何通信的整个 DOCKER-ISOLATION 链。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)