必须创建自定义桥接网络并指定子网,再通过--ip参数绑定IP;默认bridge网络不支持静态IP,且--ip值须在子网范围内且未被占用。

1. 创建带子网的自定义网络
这是前提。Docker 只允许在用户自定义的 bridge 网络中分配静态 IP。
例如,创建一个子网为 192.168.100.0/24、网关为 192.168.100.1 的网络:
docker network create --subnet=192.168.100.0/24 --gateway=192.168.100.1 mynet
- --subnet 必须指定,且 CIDR 掩码要合理(常用 /24 或 /16)
- --gateway 可选,但建议显式设置,避免与某些旧版 Docker 冲突
- 网络名(如
mynet)需唯一,不能与已有网络重名
2. 启动容器并绑定指定 IP
使用 --network 连接到上一步创建的网络,并用 --ip 指定容器在此子网内的固定地址:
docker run -d \ --network=mynet \ --ip=192.168.100.10 \ --name=myapp \ nginx:alpine
- --ip 值必须落在 --subnet 范围内(如 192.168.100.10 ∈ 192.168.100.0/24 ✅;192.168.101.10 ❌)
- 该 IP 不能已被其他容器占用,否则启动失败
- 重启容器后 IP 不变,只要仍连在同一自定义网络中
3. 验证 IP 是否生效
运行后可立即检查:
docker inspect myapp | grep -A 3 "IPAddress"
输出中应明确显示:
"IPAddress": "192.168.100.10""Gateway": "192.168.100.1"
4. 注意事项与常见错误
- 默认的
bridge网络不支持--ip,强行使用会报错:user specified IP address is supported only when connecting to a user defined network - 宿主机防火墙(如 ufw、firewalld)可能拦截该 IP 的入站流量,需放行对应端口
- 若需从外部访问容器服务,仍需配合
-p映射端口(IP 绑定 ≠ 自动对外暴露) - 多个容器不能共用同一 IP + 端口组合,否则端口冲突


















