必须同时指定--subnet和--gateway参数,缺一不可;--subnet须为CIDR格式(如172.20.1.0/24),--gateway必须落在子网内且非网络/广播地址,否则容器无法通信。
配置 docker 自定义网络的子网掩码和网关,核心是确保二者严格匹配且符合网络规则——必须同时指定 --subnet 和 --gateway,缺一不可,否则容易出现容器无法通信、ping 不通宿主机或无默认路由等问题。
命令行创建时:用 docker network create 显式传参
子网必须用 CIDR 格式(如 172.20.1.0/24),网关必须落在该子网内,且不能是网络地址(如 .0)或广播地址(如 .255):
docker network create --driver bridge --subnet=172.20.1.0/24 --gateway=172.20.1.1 mynet- 错误示例:
--subnet=192.168.100.0/24却漏掉--gateway→ Docker 可能默认设为172.18.0.1,但该地址不在你指定的子网中,导致路由失效 - 验证是否生效:运行
docker network inspect mynet,查看IPAM.Config中的Subnet和Gateway是否一致且合法
Docker Compose 中:在 networks 下用 ipam 定义
适用于多服务协同部署,支持固定 IP 分配与子网复用:
在 Linux 上通过 Docker 运行 OpenClaw,并使用 Tailscale 实现远程访问。⚠️ 涉及 sudo、Docker、Tailscale和凭证挂载——请先查阅安全章节...
- 在
docker-compose.yml的networks区块中声明子网和网关: networks: app-net: driver: bridge ipam: config: - subnet: 172.20.0.0/16 gateway: 172.20.0.1- 服务可进一步绑定静态 IP(如
ipv4_address: 172.20.1.10),前提是该地址属于上述子网范围 - /16 表示子网掩码为
255.255.0.0,可用主机数约 65534;/24 对应255.255.255.0,可用 254 个地址
避坑要点:子网冲突与地址合法性检查
即使命令执行成功,也不代表网络真能通——宿主机已有同网段路由会干扰 Docker 网络行为:
- 创建前先查冲突:
ip route show | grep "172.20",若已存在相同网段路由,需先清理或换网段 - 网关必须是子网内的有效主机地址:例如
172.20.1.0/24的合法网关可选172.20.1.1或172.20.1.254,但不能是172.20.1.0(网络地址)或172.20.1.255(广播地址) - 容器启动后进容器检查:
ip a看是否获得预期 IP,ip route看默认网关是否指向你设定的--gateway
为什么必须手动指定网关?
Docker 不会根据子网自动推导网关。它只在未提供 --gateway 时回退使用默认值(通常是 .1),但这个默认值仅对 Docker 自动生成的子网安全。一旦你自定义了 --subnet,就必须同步指定匹配的 --gateway,否则网络平面断裂,容器出向流量无路可走。

















