最稳妥可扩展的方式是修改 Docker 的 default-address-pools——它统一约束所有 bridge 网络,避免网段重叠;需确认内网冲突段后选用安全替代池(如 192.168.200.0/24),配置 daemon.json 中 bip 与 default-address-pools,并执行停服、清桥、重启、验证全流程,存量容器须重建方可生效。
直接修改 Docker 的
default-address-pools
是规避容器网段与企业内网物理重叠最稳妥、可扩展的方式——它不只解决默认 bridge 网络(
docker
0),更统一约束所有后续创建的自定义 bridge 网络,避免“修好一个、冒出一堆”。
确认冲突网段并选择安全替代池
先查清企业内网实际使用的地址段(如 172.16.0.0/12、192.168.10.0/24 或 10.200.0.0/16),再避开整个范围。Docker 默认会从 172.17.0.0/16~172.31.0.0/16 自动选网段,所以推荐选用:
192.168.200.0/24
(小规模部署,易识别)
100.64.0.0/10
(IANA 保留的 CGNAT 段,企业内网几乎不用)
172.100.0.0/16
(彻底跳出 172.16–31 冲突区)
配置 daemon.json 启用地址池控制
编辑
/etc/docker/daemon.json
,确保包含完整结构(注意 JSON 语法严格):
说明:
Docker Sandbox
创建并管理 Docker 沙箱虚拟机环境以安全执行代理。适用于运行不受信任代码、探索包或隔离代理工作负载。支持 Claude、Codex、Copilot、Gemini 和 Kiro 代理,并提供网络代理控制。
下载
bip
:仅设定 docker0 默认网桥的 IP 和子网,必须与 pools 中的 base 兼容(同网段或为其超集)
default-address-pools
:真正起作用的全局策略。Docker 创建任意新 bridge 网络(包括 docker-compose 自动生成的)时,都从此池中按 size 划分子网(如 size=24 → /24 子网)
多个池可并列,用于分层管理(例如不同环境用不同 base)
停服→清理→重启→验证全流程
配置生效需完整操作,跳过任一环节都可能残留旧网段:
停止服务:
清除旧网桥:
重启服务:
验证是否生效:
应显示你设定的 subnet;再执行
,确认新网络也落在同一池内
对存量容器和 Compose 的处理要点
已运行的容器不会自动迁移网段,必须重建:
普通容器:
,再用原命令重新 run
Docker Compose:无需改 YAML,但需
。Compose 会读取 daemon.json 的 default-address-pools,自动分配新子网
若依赖固定容器 IP,应在
时显式指定
和
,而非依赖自动分配
{"bip": "192.168.200.1/24","default-address-pools": [{"base": "192.168.200.0/24", "size": 24}]}sudo systemctl stop docker docker.socket containerdsudo ip link delete docker0 2>/dev/null || truesudo systemctl daemon-reload && sudo systemctl start dockerdocker network inspect bridge | grep -A3 Subnetdocker network create testnet && docker network inspect testnet | grep Subnetdocker stop && docker rm docker-compose down && docker-compose up -ddocker network create--subnet--gateway