最直接有效的办法是修改 docker 默认桥接网段,需先确认并避开公司内网、k8s podcidr、virtualbox/vmware host-only 网络及已有 docker 网络等所有冲突段,再通过 /etc/docker/daemon.json 配置 default-address-pools 或 bip 并重启 docker 服务。

安装 Docker 后,若发现容器网络与公司内网、K8s 集群、虚拟机(如 VirtualBox、VMware)或云服务(如腾讯云数据库)的网段重叠,最直接有效的办法是修改 Docker 默认桥接网段。关键不是随便换一个地址,而是避开所有已知占用网段,并通过守护进程配置固化生效。
确认当前冲突网段和已有网络占用
不查清真实网络环境,改了也白改。务必执行以下检查:
- 查宿主机路由表:ip route(Linux/macOS)或 ipconfig(Windows WSL),找出公司内网主段,例如 172.18.0.0/16、10.20.0.0/16 或 192.168.50.0/24
- 查 Kubernetes podCIDR:kubectl cluster-info dump | grep -i cni,避免与 K8s Pod 网络重叠
- 查 VirtualBox/VMware 的 Host-Only 网络:VBoxManage list hostonlyifs 或界面设置,常见段如 192.168.56.0/24
- 查已存在的 Docker 网络:docker network ls + docker network inspect
,留意 br- 开头的自定义桥接网段 - 避开高频冲突段:172.17.0.0/16(Docker 默认)、172.18.0.0/16、192.168.1.0/24–192.168.100.0/24
编辑 daemon.json 指定新默认网段
这是影响所有 docker run 容器(未指定网络时)的根本性配置,必须在守护进程级完成:
- Linux/macOS:编辑 /etc/docker/daemon.json;Windows Docker Desktop:编辑 %ProgramData%\Docker\config\daemon.json
- 推荐使用 default-address-pools(更灵活,支持后续自动分配多个 /24 子网):
{"default-address-pools": [{"base": "172.29.0.0/16", "size": 24}]} - 仅需改默认 bridge(简单场景)可用 bip:
{"bip": "172.29.0.1/16"} - 文件不存在可新建;保存后必须重启 Docker 服务:
sudo systemctl restart docker(Linux)或重启 Docker Desktop(macOS/Windows)
验证并清理残留
改完不验证 = 没改;有旧容器运行时,可能残留旧 docker0 或路由条目:
- 验证是否生效:docker network inspect bridge | grep Subnet,应显示新网段;再执行 ip addr show docker0,确认 IP 和子网匹配
- 若仍不生效,先停全部容器:docker stop $(docker ps -q)
- 必要时停 Docker 服务,手动清理旧网桥:
sudo ip link set dev docker0 down
sudo brctl delbr docker0(需安装 bridge-utils) - 重启 Docker 后,docker0 会按新配置重建
补充说明:自定义网络作为辅助手段
对于已有项目或需要精细控制的场景,可单独创建隔离网络:
- docker network create --driver bridge --subnet=192.168.200.0/24 myapp-net
- 启动容器时显式指定:docker run --network=myapp-net …
- 该方式不改动全局默认行为,适合过渡或混合环境,但无法解决未指定网络的默认容器冲突











