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。![image.png](https://cdn.nlark.com/yuque/0/2024/png/34397865/1716967938656-189a11df-06e4-4ec4-95fb-e3d969e8cf8e.png#averageHue=%23000000&clientId=ufbf7b87a-4d6e-4&from=paste&height=121&id=u5f0501ab&originHeight=151&originWidth=1303&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=26527&status=done&style=none&taskId=ue5e2bfc0-7491-4fbf-8daa-980492a0ed3&title=&width=1042.4)
步骤7:使用新的bridge网络创建新的容器。
docker run -it -d --name=test3 --network=isolated_nw busybox
docker ps
**步骤8:查看主机空间的网络状况,新增了新的veth接口。挂在新的bridge网桥下面。
步骤9:使用brctl show查看网桥状况,此时新增的bridge下挂了一个网络接口,就是test3容器的网络接口。![image.png](https://cdn.nlark.com/yuque/0/2024/png/34397865/1716968093418-ad85640a-2eec-47df-bb5a-e93b014d3063.png#averageHue=%23000000&clientId=ufbf7b87a-4d6e-4&from=paste&height=123&id=u0e42bbde&originHeight=154&originWidth=994&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=20890&status=done&style=none&taskId=u7f6e6ba1-658b-4275-9c0d-d6697019125&title=&width=795.2)
步骤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