生产环境必须使用自定义bridge网络而非默认docker0。需指定子网、网关,启用icc和内置dns实现服务名解析,所有容器显式加入该网络,并通过docker compose统一管理,确保隔离、稳定与低延迟。

生产环境不用默认 bridge,必须用自定义 bridge 网络。默认的 docker0 网桥缺乏服务发现、子网控制和隔离能力,无法满足稳、低延、可管等核心要求。
创建带子网与网关的自定义 bridge 网络
这是所有容器通信的基础层。避免使用默认 172.17.0.0/16,防止与宿主机或云 VPC 冲突:
docker network create \ --driver bridge \ --subnet 172.22.0.0/16 \ --gateway 172.22.0.1 \ --opt com.docker.network.bridge.enable_icc=true \ my-prod-bridge
其中 enable_icc=true 启用容器间通信(ICC),配合内置 DNS,让 db、cache 这类服务名可直接解析。
所有容器显式指定网络,禁用隐式连接
启动时必须加 --network my-prod-bridge,不依赖默认行为:
docker run -d --name db --network my-prod-bridge -e MYSQL_ROOT_PASSWORD=123 mysql:8.0 docker run -d --name api --network my-prod-bridge my-api-image
这样 api 容器内可直接 ping db 或用 jdbc:mysql://db:3306/app 连接,IP 变更不影响通信。
配合 Docker Compose 统一管理
在 docker-compose.yml 中声明网络,确保服务自动加入且配置一致:
version: '3.8'
services:
web:
image: nginx
networks: [app-net]
app:
image: myapp:prod
networks: [app-net]
networks:
app-net:
driver: bridge
ipam:
config:
- subnet: 172.23.0.0/16
gateway: 172.23.0.1
关键细节不能跳过
- 容器启动后,用
docker network inspect my-prod-bridge验证子网、网关和已连容器 - 禁用
--link(已废弃),只依赖 DNS 名称解析 - 若需跨节点通信,bridge 网络仅限单机;多节点必须叠加加密 overlay 网络
- MTU 建议统一设为 1450(尤其在 VXLAN 或云环境中),避免分片丢包
不复杂但容易忽略











