必须创建自定义 bridge 网络并指定子网,再通过 docker run --network --ip 分配静态 IP;已有容器可通过 network disconnect + connect --ip 间接配置;默认 bridge 网络不支持静态 IP。

在 Docker 容器中配置静态 IP 地址,不能直接在容器内用 ifconfig 或 ip addr 临时设置(重启即失效),也不能靠 docker run --ip 对默认 bridge 网络使用——因为默认的 bridge 网络不支持静态 IP 分配。真正可行的方式是:创建自定义 bridge 网络并指定子网,然后在运行容器时通过 --ip 或 --ip6 显式指定 IP。
创建自定义 bridge 网络并预设子网
这是配置静态 IP 的前提。Docker 要求静态 IP 必须落在自定义网络的子网范围内,且未被其他容器占用。
- 创建带固定子网的网络(例如
172.20.0.0/16):
docker network create --driver bridge \ --subnet=172.20.0.0/16 \ --gateway=172.20.0.1 \ mynet
-
--subnet必须指定,否则--ip会报错; -
--gateway可选,但建议指定,便于容器访问外网(需确保宿主机开启 IP 转发并配置 NAT); - 网络名(如
mynet)后续运行容器时要用到。
运行容器时指定静态 IPv4 地址
使用 docker run 启动时,通过 --network 和 --ip 组合绑定固定 IP:
docker run -d \ --name mynginx \ --network mynet \ --ip 172.20.10.100 \ -p 8080:80 \ nginx
- IP(如
172.20.10.100)必须属于mynet的子网范围; - 该 IP 不能已被其他容器占用,否则启动失败;
- 容器内无需额外配置,Docker 会在初始化网络时自动注入;
- 可通过
docker exec mynginx ip addr show eth0验证是否生效。
为已有容器“补配”静态 IP(不推荐,仅限调试)
Docker 不支持直接修改运行中容器的 IP。但可借助网络重连方式间接实现(本质是断开再连入指定 IP):
- 先断开容器与当前网络的连接(若已连):
docker network disconnect bridge mynginx
- 再连接到自定义网络并指定 IP:
docker network connect --ip 172.20.10.100 mynet mynginx
- 注意:此操作要求容器已停止或正在运行,但部分应用可能因网络中断短暂异常;
- 该 IP 必须未被占用,且目标网络(
mynet)已存在并含对应子网; - 不适用于默认
bridge网络,仅对自定义 bridge 有效。
验证与排错要点
配置后务必检查关键环节,避免“看似成功实则不通”:
- 确认容器 IP 正确:
docker inspect mynginx | grep IPAddress或进入容器执行hostname -I; - 检查网络路由:
docker exec mynginx ip route,应有指向172.20.0.1的默认路由; - 测试连通性:从容器 ping 网关(
ping 172.20.0.1)、宿主机、其他同网段容器; - 若无法访问外网,检查宿主机是否启用转发:
sysctl net.ipv4.ip_forward应为1,并确认 Docker daemon 未禁用 iptables; - 防火墙(如 ufw、firewalld)可能拦截跨网络流量,临时关闭可辅助定位。

















