在《Docker桥接网络入门》基础知识上,本文将通过实例来创建Docker的桥接网络,包括默认的桥接网络和用户自定义的桥接网络。并通过桥接网络和网络连接来测试各独立容器之间的连通性。

环境说明

1. 安装docker,可参考《Docker在CentOS系统中的安装》;

2. 容器alpine01和容器alpine02创建在默认桥接网络bridge上;

3. 容器alpine03、容器alpine04和容器alpine05创建在自定义的桥接网络alpine-net上;

4. 容器alpine05连接到bridge网桥上。

使用默认的桥接网络

1. 确认目前Docker宿主机的网络情况。

docker network ls




docker openwrt Docker openwrt 能ping通但不能上网_docker openwrt


当前Docker宿主机上只有一个默认的桥接网络:f8f96ec60ff2

2. 启动容器alpine01和容器alpine02,并默认连接到bridge网桥上。

docker run -dit --name alpine01 alpine ashdocker run -dit --name alpine02 alpine ash

没有指定 --network标志,两个容器都将连接到默认bridge网络。


docker openwrt Docker openwrt 能ping通但不能上网_桥接_02


两容器已经正常启动如下:


docker openwrt Docker openwrt 能ping通但不能上网_docker_03


3. 检查容器alpine01和容器alpine02是否正确连接到bridge网桥上。

docker network inspect bridge


docker openwrt Docker openwrt 能ping通但不能上网_连通性_04


上图可看出,默认网桥bridge的网关是172.17.0.1,子网:171.17.0.0/16


docker openwrt Docker openwrt 能ping通但不能上网_桥接_05


上图可以看到,容器alpine01和容器alpine02已经连接到bridge默认网桥上,且IP分配的IP地址分别是:172.17.0.4和172.17.0.5

4. 容器alpine01和容器alpine02连通性测试。

4.1进入容器alpine01内部

docker attach alpine01


docker openwrt Docker openwrt 能ping通但不能上网_连通性_06


4.2连通性测试ping外网和默认网桥内的其他节点。

ping -c 2 www.baidu.com


docker openwrt Docker openwrt 能ping通但不能上网_连通性_07


ping -c 2 172.17.0.5


docker openwrt Docker openwrt 能ping通但不能上网_连通性_08


从以上两个截图可以看出,内外均能连通。

使用用户自定义的桥接网络

1. 创建自定义网络alpine-net;

docker network create --driver bridge alpine-net


docker openwrt Docker openwrt 能ping通但不能上网_docker_09


2. 查看alpine-net网络的详细情况;

docker network inspect alpine-net


docker openwrt Docker openwrt 能ping通但不能上网_docker openwrt_10


自定义桥接网络alpine-net的网关是:172.22.0.1,子网:172.22.0.0/16

3. 在alpine-net上创建三个容器alpine03、alpine04和alpine05;

docker run -dit --name alpine03 --network alpine-net alpine ashdocker run -dit --name alpine04 --network alpine-net alpine ashdocker run -dit --name alpine05 --network alpine-net alpine ash


docker openwrt Docker openwrt 能ping通但不能上网_桥接_11


4. 再次查看alpine-net网络详情;


docker openwrt Docker openwrt 能ping通但不能上网_docker_12


上图可以看到,容器alpine03、alpine04和容器alpine05已经连接到alpine-net网桥上,且分配的IP地址分别是:172.22.0.2、172.22.0.3和172.22.0.4

5. 连接alpine05到默认网桥bridge上;

docker network connect bridge alpine05

6. 再次查看bridge网络详情;

docker network inspect bridge


docker openwrt Docker openwrt 能ping通但不能上网_docker_13


从上图可以看出,alpine05成功连接到bridge网桥上,IP地址为:172.17.0.6

7. 连通性测试

7.1进入容器alpine03

docker container attach alpine03

7.2测试与外网www.baidu.com以及内网172.22.0.3(alpine04)、172.22.0.4(alpine05)的连通性


docker openwrt Docker openwrt 能ping通但不能上网_docker_14


由上图可以看出自定义网桥网络alpine-net内的节点与外网和内网中的其他节点均能ping通。

7.3 测试alpine-net 和 bridge之间的连通性

7.3.1进入alpine05

docker attach alpine05

7.3.2 ping alpine04(alpine-net中的节点)

Ping alpine04Ping 172.22.0.3

7.3.3 ping alpine01(bridge中的节点)

Ping alpine01Ping 172.17.0.4


docker openwrt Docker openwrt 能ping通但不能上网_docker_15


从上图连通性测试结果来看,alpine05可以通过容器名或IP连通alpine-net网络中的任何节点,而对创建了链接的另一个网络bridge内的节点,只能通过IP地址连接访问。为什么呢?原因可以在《Docker桥接网络入门》中自行查找!

今天的分享就到这里,谢谢大家支持!