Docker bridge网络
前提拉取镜像
docker pull busybox
步骤1:创建busybox容器,执行如下步骤创建容器。
docker run -it -d --name=test1 busybox
docker run -it -d --name=test2 busybox
步骤2:执行docker attach test1进入test1容器,并执行ip a查看其ip地址。执行ctrl+p ctrl+q退出容器。对test2执行同样的操作。
步骤3:从test2容器ping test1,再ping外网,检查连通性。执行完后ctrl+p ctrl+q退出。
步骤4:查看主机的iptables的nat表,在POSTROUTING链里发现当非docker0网卡为出接口时,会做NAT转换。
iptables -t nat -vnL
步骤5:创建新的bridge网络。查看已创建的bridge网络。
docker network create --driver bridge isolated_nw
docker network ls
步骤6:使用ip a查看主机网络空间,可以发现新增了bridge,后缀为bridge网络的uuid。
步骤7:使用新的bridge网络创建新的容器。
docker run -it -d --name=test3 --network=isolated_nw busybox
docker ps
**步骤8:查看主机空间的网络状况,新增了新的veth接口。挂在新的bridge网桥下面。
步骤9:使用brctl show查看网桥状况,此时新增的bridge下挂了一个网络接口,就是test3容器的网络接口。
步骤10:登陆到test3容器,查看其ip地址发现和主机网络中的新增桥的地址在同一网段。,尝试ping test1和test2。结果是无法ping通,说明不同的bridge之间网络是隔离的。
docker attach test3
ping 172.17.0.2
步骤11:查看主机的iptables,主机的iptables显示从新增网桥到docker0网桥的数据包会被丢弃。
步骤12:将test3连接到bridge网桥上。查看主机网络和brctl,会有新的接口挂到了docker0上。
docker network connect bridge test3
brctl show
**步骤13:进入test3容器,查看容器网络,有和docker0处于相同网段的新的接口。
尝试ping test1和test2。test3已经可以和test1,test2相互通信。**
可以看到容器test3下新增加了一个172.17网段的网口
此时可以互通
如若取消添加的网口
docker network disconnect bridge test3