要让 Docker 容器间通过固定 IP 可靠通信,必须使用自定义 bridge 网络并显式指定 --ip;默认 bridge 网络不支持静态 IP,需先创建带子网的自定义网络(如 docker network create --subnet=172.20.0.0/24 mynet),再启动容器时用 --ip 分配子网内唯一地址(如 172.20.0.10),重启后 IP 不变,且同网容器可直接通过该 IP 互通。

要让 Docker 容器之间通过固定 IP 可靠通信,核心是**使用自定义 bridge 网络 + 显式指定 --ip**。默认的 bridge 网络不支持静态 IP,必须先创建带子网的自定义网络,再将容器接入并分配确定地址。
创建带子网的自定义 bridge 网络
这是前提,不可跳过。Docker 默认的 bridge 网络(即 docker0)不支持 --ip 参数,必须新建一个用户定义的桥接网络,并明确划分 CIDR 子网。
- 命令示例:
docker network create --subnet=172.20.0.0/24 --gateway=172.20.0.1 mynet - 子网掩码建议用 /24(256 个地址)起步,避免过小导致地址耗尽;网关地址会自动占用 .1,不可用于容器
- 执行后可用
docker network inspect mynet验证子网和网关是否正确写入
启动容器时绑定固定 IP
在自定义网络中,启动容器时直接用 --ip 指定其 IPv4 地址,该地址必须落在所选子网范围内,且不能与网关或已分配地址冲突。
- 例如:
docker run -d --name app1 --network mynet --ip 172.20.0.10 nginx - 再起一个:
docker run -d --name app2 --network mynet --ip 172.20.0.11 redis - 重启任一容器,IP 不会变化;
docker inspect app1中的IPAddress字段始终为 172.20.0.10
验证容器间固定 IP 连通性
同一自定义网络下的容器,默认启用内建 DNS,但固定 IP 通信不依赖 DNS,可直接用 IP 测试底层连通性。
- 进入 app1:
docker exec -it app1 sh,执行ping -c 3 172.20.0.11,应能通 - 从宿主机也可 ping 通(因自定义 bridge 网络默认允许宿主机路由访问容器 IP)
- 注意:不同自定义网络之间默认隔离,如需跨网通信,需用
docker network connect手动连接容器到多个网络
补充说明:为什么不用默认 bridge?
很多人尝试对默认 bridge 网络使用 --ip,结果报错“user specified IP address is supported only when connecting to a custom network”。这是因为默认 bridge 的 IPAM(IP 地址管理)模块不支持手动分配,它只做动态 DHCP 分配。只有自定义网络才启用完整 IPAM 支持,允许静态绑定、IP 范围限制、网关定制等能力。


















