最常用、最可靠的方式是直接修改 /etc/docker/daemon.json 中的 bip 字段,它控制 docker0 网桥的网关地址和子网(如 "bip": "192.168.50.1/24"),决定默认 bridge 网络下容器的 IP 分配范围与网关,修改后需重启 Docker 并验证。

直接改 /etc/docker/daemon.json 里的 bip 字段,是最常用、最可靠的方式。它控制 Docker 默认 bridge 网络(即 docker0)的网关地址和子网,所有新启动且未指定网络的容器都会从这个网段自动获取 IP。
用 bip 指定 bridge 网关和子网
bip 是 “bridge IP” 的缩写,格式为 "bip": "192.168.50.1/24"。它会同时设置:
- 宿主机上
docker0网桥的 IP 地址(即网关) - 该网桥所管理的默认子网范围(如
192.168.50.0/24) - 容器在
bridge网络下自动分配的 IP 起始范围(通常从.2开始)
示例配置:
{"bip": "192.168.50.1/24",
"registry-mirrors": ["https://registry.cn-hangzhou.aliyuncs.com"]
}
修改后必须重启 Docker:systemctl restart docker,再运行 docker network inspect bridge 确认 Subnet 和 Gateway 已更新。
用 default-address-pools 分配多个子网池(适合多项目隔离)
当单个 bip 不够用(比如要为不同 compose 项目或动态创建的网络预留不同段),可用 default-address-pools 预设一批 CIDR 块。Docker 会按需从中分配新 bridge 网络的子网。
例如:
在 Linux 上通过 Docker 运行 OpenClaw,并使用 Tailscale 实现远程访问。⚠️ 涉及 sudo、Docker、Tailscale和凭证挂载——请先查阅安全章节...
"default-address-pools": [
{"base": "10.200.0.0/16", "size": 24},
{"base": "172.30.0.0/16", "size": 24}
]
}
这样后续新建的自定义 bridge 网络(如 docker network create 或 compose 自定义网络)会从这些池中取一个未使用的 /24 子网,避免手动指定冲突。
注意:default-address-pools 不影响已有 bridge 网络,只作用于新创建的用户网络;bip 仍决定默认 bridge 行为。
配合 Docker Compose 使用自定义网段
Docker Compose 默认复用 bridge 网络,所以改了 bip 后,不写 networks 的服务也会走新网段。若需独立网段,应在 docker-compose.yml 中显式定义:
app_net:
driver: bridge
ipam:
config:
- subnet: 10.10.10.0/24
gateway: 10.10.10.1
此时该 compose 项目完全脱离 docker0,使用自己独立的虚拟网桥和子网,互不干扰。
操作前必须注意的关键点
修改前务必确认新网段与宿主机、物理网络、其他虚拟网桥无重叠,否则会导致:
- 容器无法访问宿主机服务(如数据库、API)
- 宿主机无法路由到容器(尤其在启用 iptables FORWARD 时)
- 已运行容器网络中断(重启 Docker 会断开所有容器网络连接)
建议操作顺序:停容器 → 改配置 → 重启 Docker → 启容器 → 验证连通性(如 ping 宿主机、访问容器内服务)。

















