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上,示意图如下所示:
在容器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中,发现可以进行通信了