核心思路是用自定义网络隔离环境、显式子网规划和统一编排管理,避免默认分配撞车;需提前避开Docker默认桥接网段172.17.0.0/16及常见私有网段,按开发、测试、预发、生产分设独立子网并绑定容器,杜绝跨环境混用,结合docker-compose按环境拆分配置,辅以网络检查与清理防冲突。

核心思路是:用自定义网络隔离环境 + 显式子网规划 + 统一编排管理,避免默认分配撞车。
明确各环境网络范围,提前避开重叠
Docker默认桥接网段(172.17.0.0/16)极易与公司内网、云VPC或数据库内网冲突。多环境部署前必须人工划分子网,不能依赖自动分配。
- 开发环境用 192.168.100.0/24
- 测试环境用 192.168.101.0/24
- 预发环境用 192.168.102.0/24
- 生产环境用 10.100.0.0/16(避开常见私有网段)
创建时直接指定子网:
docker network create --driver bridge --subnet=192.168.100.0/24 --gateway=192.168.100.1 dev-network
为每个环境创建独立网络并绑定容器
不同环境的容器绝不能共用同一网络,否则服务发现混乱、DNS解析错乱、甚至跨环境调用。
- 启动开发环境服务时显式指定网络:
docker run --network dev-network --name api-dev ... - 测试环境走 test-network,预发走 staging-network,互不干扰
- 容器内通过服务名访问(如
curl http://db:5432),Docker 自动做 DNS 解析
用 docker-compose 按环境分组管理
避免手写一堆 docker run 命令,用 compose 文件按环境拆分配置,网络定义内聚在各自文件中。
示例 docker-compose.dev.yml:
version: '3.8'
services:
api:
image: myapp:dev
networks:
- dev-net
db:
image: postgres:15
networks:
- dev-net
<p>networks:
dev-net:
driver: bridge
ipam:
config:</p><ul><li>subnet: 192.168.100.0/24
gateway: 192.168.100.1启动命令也按环境区分:docker-compose -f docker-compose.dev.yml up -d
检查与清理残留网络,防止静默冲突
旧环境停用后,残留网络可能仍占用子网,导致新环境创建失败(报错 Pool overlaps with other one)。
- 列出所有网络:
docker network ls - 检查某网络详细配置:
docker network inspect dev-network,重点看Subnet和IPRange是否一致 - 删除无用网络:
docker network rm dev-network(确保无容器连接后再删) - 若发现 bridge 默认网段异常(如 Subnet 和 IPRange 不匹配),需重启 Docker 服务或重置 daemon.json 配置


















