Linux中Docker容器固定IP需创建自定义bridge网络并启动时指定IP:先用docker network create --subnet和--gateway创建网络,再通过--net和--ip运行容器,IP须在子网范围内且不冲突。

Linux 中让 Docker 容器拥有固定 IP,关键不是直接改容器本身,而是通过自定义 bridge 网络 + 启动时指定 IP 实现。Docker 默认的 bridge 网络不支持静态 IP 分配,必须先创建带子网和网关的自定义网络。
创建带子网的自定义 Docker 网络
这是固定容器 IP 的前提。Docker 需要知道可用地址范围,才能按需分配或接受你指定的地址。
- 运行命令创建网络(示例使用 172.18.0.0/26 子网):
docker network create --subnet=172.18.0.0/26 --gateway=172.18.0.1 mynet - --subnet 必须填写,决定 IP 可用池;--gateway 建议显式指定,避免后续容器无法通信
- 创建后可用
docker network ls查看,用docker network inspect mynet确认子网和网关是否正确
启动容器时绑定固定 IP
只有在连接到你刚创建的自定义网络时,--ip 参数才有效。默认 bridge 网络下该参数会被忽略。
- 启动命令示例(为 Nginx 容器分配 172.18.0.10):
docker run -d --name nginx-app --net mynet --ip 172.18.0.10 -p 8080:80 nginx - IP 必须落在
--subnet范围内,且不能与网关、其他容器冲突 - 若容器已存在但未指定 IP,可先停止,再用
docker network connect --ip 172.18.0.11 mynet 容器名手动连接并指定
验证容器 IP 是否固定
重启容器或 Docker 服务后,只要网络没删、IP 没被占用,该容器 IP 就不会变。
- 查看当前 IP:
docker inspect nginx-app | grep -i \"ipaddress\" - 检查网络详情中是否包含你设定的值,重点关注
IPAddress和Gateway - 进入容器执行
ip a,确认 eth0 的 inet 地址与设定一致
常见问题提醒
配置后连不上?大概率是网络层级不匹配导致的。
-
宿主机 IP 和容器 IP 不在同网段:容器 IP(如 172.18.0.x)是 Docker 内部私有地址,不能直接从 Windows 或手机 ping 通;需靠
-p端口映射访问服务 -
容器间无法互访:确保所有容器都连接到同一个自定义网络(如
mynet),不同网络默认隔离 -
重启 Docker 后 IP 丢失:检查是否误删了自定义网络(
docker network rm mynet),网络删除后所有关联容器 IP 会失效


















