docker中不同network容器之间互相通信

背景:使用docker network create 命令创建了一个新的桥(docker1,子网地址为172.26.0.0/16,网关是172.26.0.1),然后启动容器b1连接到docker1上。docker默认的桥bridge(也就是docker0,子网地址为10.0.0.0/16,默认网关为10.0.0.1),然后启动容器b2连接到docker0上,示意图如下所示:

docker中不同network容器之间互相通信

在容器b1和容器b2中分别ping对方的ip,发现无法通信。

解决办法:

使用iptables -t filter -nvL查看iptables中DOCKER-ISOLATION链的规则,发现在在docket0和docket1之间的策略是DROP,即拒绝,因此可以通过修改相应的规则

iptables -I DOCKER-ISOLATION -i docker0 -o docker1 -j ACCEPT

iptables -I DOCKER-ISOLATION -o docker0 -i docker1 -j ACCEPT

这样再次进入容器b1和b2中,发现可以进行通信了

docker中不同network容器之间互相通信