Docker提供了bridge, host, overlay等多种网络。同一个Docker宿主机上同时存在多个不同类型的网络。位于不同网络中的容器,彼此之间是无法通信的。Docker容器的跨网络隔离与通信,是借助了iptables的机制。
我们知道,iptables的filter表中默认划分为IPNUT, FORWARD和OUTPUT共3个链,详情请参考 iptables及其过滤规则。Docker在FORWARD链中,还额外提供了自己的链,以实现bridge网络之间的隔离与通信。
1. Docker在iptables的filter表中的链
在2015.12之前,Docker只额外提供了DOCKER链。
在此之后,直到Docker 17.06.0(2017.6)之前的版本中,Docker提供了如下2个链:
- DOCKER
- DOCKER-ISOLATION
在Docker 17.06.0(2017.6)及之后,Docker 18.03.1(2018.4)及之前的版本中,Docker提供了如下3个链:
- DOCKER
- DOCKER-ISOLATION
- DOCKER-USER
查看Docker的iptables如下:
Chain FORWARD (policy ACCEPT)
target prot opt source destination