配置自定义桥接网络是 Docker 实现容器间安全隔离最常用有效方式,通过创建独立网段和内建 DNS,使仅同网络容器可互通;需用 --subnet 指定 IP 段并显式声明 --network 接入,否则默认进入 bridge 网络失去隔离。

配置自定义桥接网络是 Docker 中实现容器间安全隔离最常用也最有效的方式。它不依赖默认的 docker0 网桥,而是创建独立网段和 DNS 域名解析能力,让只有明确加入同一网络的容器才能互通。
创建带子网的自定义桥接网络
直接指定 IP 段能避免地址冲突,也便于后期规划和排查:
- 运行命令创建网络:
docker network create --driver bridge --subnet=172.20.0.0/16 app-network -
--subnet参数确保容器获得固定范围内的 IP(如172.20.0.2、172.20.0.3),不会与宿主机或其他网络重叠 - 该网络自带内建 DNS,容器启动时若指定名称(如
--name web-api),同网络内其他容器可直接用ping web-api访问
启动容器并接入指定网络
必须显式声明 --network,否则容器会默认进入 bridge 网络,失去隔离效果:
- 正确示例:
docker run -d --name api-srv --network app-network nginx:alpine - 多个容器共用同一网络名(如
app-network)才能互相发现和通信 - 若启动时未指定
--network,或指定为bridge、host等其他网络,它们就无法与app-network中的容器通信
验证隔离是否生效
关键不是看容器是否“能联网”,而是确认跨网络通信被阻断:
- 分别在两个不同网络中启动容器:
docker run -d --name a --network app-network alpine sleep infinity和docker run -d --name b --network bridge alpine sleep infinity - 进入容器 a:
docker exec -it a sh,执行ping b—— 应失败(无 DNS 解析,且路由不通) - 执行
ping 172.17.0.2(假设 b 的默认 bridge IP)—— 也应失败,证明网络层已隔离
配合 Docker Compose 使用更稳妥
在编排场景下,声明式配置能避免手动遗漏,还能绑定子网和固定 IP:
- 在
docker-compose.yml中定义网络:
networks:<br> app-network:<br> driver: bridge<br> ipam:<br> config:<br> - subnet: 172.20.0.0/16
- 服务中引用:
services: web: networks: [app-network] - 这样所有服务自动加入同一网络,无需逐条
docker run,也不易出错


















