允许使用docker-compose在两个docker桥networking之间进行通信

我正在使用docker撰写相当复杂的docker集装箱基础设施。 这些容器运行在4个不同的networking中(类似于我所模仿的生产环境)。 Docker Compose为我创build了这四个networking,一切工作都很长,因为容器不会尝试与不同networking中的其他容器进行通信。 当他们这样做,连接被丢弃。 我能够找出为什么它被丢弃,这是因为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 

我写了一个小脚本,删除了我想删除的规则(并允许在所select的桥梁之间进行通信),一切都像魅力一样,但不知何故,它们在某些时候被Docker重新创build,即使不重新创build这些networking,也需要我再次运行该脚本,这是非常烦人的。 有没有什么方法可以明确告诉Docker允许两个桥之间的通信? 或者,在启动Docker-Compose容器后运行特定的shell脚本有一些技巧吗?

如果任何人有兴趣,我已经设法通过iptables来处理这个问题。 解决scheme是明确允许网桥子网之间的通信(假设他们有固定的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链。

隔离是使用多个网桥的核心原因。 在Docker的世界里,你应该把你想要在同一个networking中相互沟通的容器。

我假设你想用四个独立的子网/二层域来复制生产networking,这些域使用路由器相互通信进行testing和其他目的? 尝试使用实验性的ipvlan驱动程序来形成具有4个不同子网的ipvlan L3networking和作为它们之间的路由器的ipvlan驱动程序。 这是你如何设置它 (向下滚动到ipvlan L3。