核心是修改 /etc/docker/daemon.json,使用 default-address-pools 指定公司未使用的私有网段(如 172.29.0.0/16)并设 size: 24,重启 docker 后 docker0 自动分配 172.29.0.0/24,后续自定义 bridge 网络依次分配 /24 子网,避免冲突。
核心是改 /etc/docker/daemon.json,用 default-address-pools 指定一个公司内网没用过的私有网段,比如 172.29.0.0/16,再设子网大小为 /24。改完重启 docker,docker0 就会自动从这个池里取第一个子网(如 172.29.0.0/24),后续新建的自定义 bridge 网络也按序分配,避免手动撞车。
先摸清你司实际在用哪些内网段
别凭印象猜,得实查:
- 运行
ip route或ifconfig(Linux/macOS),看宿主机默认网关所在网段,比如192.168.10.0/24或10.254.0.0/16 - 检查是否有 Kubernetes、VMware、VirtualBox 或 docker-compose 自定义网络占用了常见段,像
172.16.0.0/12、172.18.0.0/16、192.168.56.0/24 - 避开高频段:优先不用
172.17.0.0/16(Docker 默认)、192.168.1.0/24、10.0.0.0/8中已知被占用的部分
推荐配置 default-address-pools(Docker 20.10+)
比老旧的 bip 更灵活,支持多子网自动分配,适合长期维护:
- 编辑
/etc/docker/daemon.json,填入类似内容:
{"default-address-pools": [{"base": "172.29.0.0/16", "size": 24}]}
-
base必须是完整私有网段(RFC 1918),且与你司现网无重叠 -
size设为24表示每个新 bridge 网络分一个/24(256 个 IP),docker0启动后自动用172.29.0.0/24,下一个是172.29.1.0/24,依此类推 - 如果只改默认
docker0,不用后续自动分配,也可用{"bip": "172.29.0.1/24"},但不推荐——它锁死整个/24,没法再建其他同段 bridge
改完必须重启并验证
配置不会热生效,要完整重启 Docker 守护进程:
- 执行
sudo systemctl daemon-reload && sudo systemctl restart docker - 检查
docker0是否更新:ip addr show docker0 | grep inet→ 应看到类似inet 172.29.0.1/24 - 确认默认 bridge 子网:
docker network inspect bridge | grep Subnet - 新建一个测试网络验证池分配:
docker network create testnet && docker network inspect testnet | grep Subnet→ 应为172.29.1.0/24
项目级隔离更安全(建议搭配使用)
全局改 daemon.json 是基础,但对多项目或 CI/CD 场景,显式指定子网更可控:
- 按需创建带固定子网的自定义网络:
docker network create --subnet=192.168.200.0/24 myapp-net - 启动容器时绑定:
docker run --network=myapp-net … - 在
docker-compose.yml中声明:
networks:
app-net:
driver: bridge
ipam:
config:
- subnet: 192.168.200.0/24











