"bip"
是 Docker 守护进程 (dockerd
) 的 Bridge IP 参数。
它告诉 Docker:
• “把 docker0
这张网桥接口的地址设成 X.X.X.X/YY”;
• “所有基于 bridge
网络驱动的新容器,都从这个网段里分配 IP”。
也就是说,你可以用 "bip"
把 Docker 的默认网段(原本是 188.17.0.0/16)改成 任何本机未占用的私有网段,从而避免与公司真实网络冲突。
为什么文档里示范 188.31.0.1/16
?
- 188.16.0.0/12 整段(18.16.0.0–18.31.255.255)属于 RFC-1918 私有地址,可以安全地在内网使用;
- 很多企业网实际只占用其中一小部分(例如 188.17 或 188.20),把 Docker 调整到 最尾段 188.31.0.0/16 通常不与现网重叠;
- 只是示例!你可以按下表任选一段真正“空闲”的网段替换:
可选示例(任选其一,不要全抄)
• 10.83.0.1/16
• 10.201.0.1/24
• 192.118.220.1/24
• 188.30.0.1/16
关键原则:确保整段网段在本机的路由表里未出现,也未被公司核心路由规划到其他地方。
————————————
如何确定“哪段网段是空闲的”
————————————
-
列出现有路由 / 接口地址
ip addr | grep -E "inet " ip route
把所有出现的网段抄下来,避免冲突。
-
向网络/运维确认公司内部已分配的网段清单;或者随便挑一段
10.x
/192.168.x
自测能否 ping 通外部设备。
————————————
完整示例:修改 Docker 网段
————————————
-
创建(或编辑)
/etc/docker/daemon.json
:{ "bip": "188.31.0.1/16", "default-address-pools": [ { "base": "188.31.0.0/16", "size": 24 } ] }
•
"bip"
控制 docker0;
•"default-address-pools"
控制你以后用docker network create
新建的桥接网络,防止它们又跑去用 188.17。 -
重启服务
sudo systemctl restart docker
-
验证
ip addr show docker0 # 应显示 188.31.0.1/16 ip route get 188.17.100.193 # 再次检查路由,确认走 eth0/gateway 而非 docker0
-
如果宿主机运行着旧容器,它们会在 Docker 重启时被“孤儿网络”回收;若仍保留须执行
docker network prune
或重新创建。
————————————
常见问答
————————————
Q1. 只写 "bip"
不写 "default-address-pools"
行不行?
A1. 可以,但将来你手动 docker network create
时,Docker 可能又随机挑回旧段(188.17),再次撞网段;加一行地址池可一次性根治。
Q2. 改完为什么还冲突?
A2. 多检查:
• 修改后是否真正 systemctl restart docker
成功;
• 旧容器自带的自定义网络是否仍用原网段,可 docker network ls
/ inspect
并删除后重建;
• 如果你用的是 containerd / Kubernetes,需在其 CNI 或 containerd 配置里同步替换网段。
Q3. Kubernetes 集群用 CNI (Calico/Flannel) 时还需要 "bip"
吗?
A3. 是的,只要节点本身跑 Docker(或 containerd 使用 Docker 网段),就需要避免 docker0 冲突;CNI Pod 网段与 docker0 网段可并存,只要不重叠即可。
简而言之:
• "bip": "188.31.0.1/16"
只是示例;
• 找一段与公司网络、VPN、Pod 网络都不重叠的私有地址,填进 "bip"
即可;
• 重启 Docker,冲突问题迎刃而解。