应避开宿主机局域网、Kubernetes、虚拟机及现有Docker网络占用的网段,推荐使用172.29.0.0/16、10.200.0.0/16或192.168.200.0/24等冷门私有网段,并通过修改daemon.json全局配置或docker network create按项目显式创建网络来实现。
直接设置自定义 ip 范围,核心是避开宿主机局域网、kubernetes、虚拟机(如 virtualbox/vmware)以及已有 docker 网络正在使用的段。不能只改一个地方,得从全局配置和项目级网络两层入手。
先确认哪些网段已被占用
运行以下命令查看当前活跃网段:
-
Linux/macOS:执行
ip route或ifconfig,重点看192.168.x.x、10.x.x.x、172.16–172.31.x.x中哪些已作为主机网关或虚拟网卡存在 -
Windows WSL:用
ipconfig查看 WSL 虚拟适配器和 Windows 主机的本地连接 -
检查 Docker 现有网络:运行
docker network ls和docker network inspect bridge,确认默认bridge是否还在用172.17.0.0/16 -
查 K8s 或 Vagrant:如果启用了 Minikube、Kind、Rancher Desktop 或 Vagrant,它们常占
172.28.0.0/24、192.168.56.0/24等段
选一个安全的私有网段
避开高频冲突段(如 172.17、172.18、192.168.1–100),推荐这几个冷门但合法的选项:
- 172.29.0.0/16:B 类私有地址,极少被企业内网或工具默认使用
-
10.200.0.0/16:A 类私有段中较偏门的选择,比
10.0.0.0/8更收敛 -
192.168.200.0/24:C 类段,适合轻量项目,避免和常见
192.168.1.x冲突
两种主流配置方式
方式一:改 Docker 全局默认(影响所有新容器)
编辑 /etc/docker/daemon.json(Linux/macOS)或 %ProgramData%\Docker\config\daemon.json(Windows):
- 只改默认 bridge 网段(简单但不够灵活):
{"bip": "172.29.0.1/16"} - 更推荐池式分配(支持后续多个子网自动创建):
{"default-address-pools": [{"base": "172.29.0.0/16", "size": 24}]}
这样每次新建网络会自动分出/24子网,比如172.29.0.0/24、172.29.1.0/24……
保存后重启 Docker:sudo systemctl restart docker(Linux)或重启 Docker Desktop。
方式二:按项目显式创建网络(推荐,更安全可控)
用 docker network create 指定完整子网与网关:
docker network create --driver bridge --subnet=172.29.10.0/24 --gateway=172.29.10.1 myapp-net- 启动容器时绑定固定 IP:
docker run -d --network=myapp-net --ip=172.29.10.5 nginx - Docker Compose 中写法:
networks:<br> app-net:<br> driver: bridge<br> ipam:<br> config:<br> - subnet: 172.29.10.0/24
验证是否生效
创建完网络后,立即验证:
-
docker network inspect myapp-net | grep -E "(Subnet|Gateway)"—— 确认输出是你设的段 - 跑一个容器,再执行
docker inspect | grep IPAddress—— IP 应落在你指定的子网内 - 从宿主机 ping 该容器 IP,确保三层可达(注意防火墙)











