Docker容器固定IP的正确方法是创建自定义bridge网络并启动时指定IP:先用docker network create --subnet=192.168.100.0/24创建网络,再用--network mynet --ip 192.168.100.10运行容器,或在docker-compose中通过ipv4_address配置。

直接用自定义 bridge 网络 + --ip 参数就能实现,这是 Docker 官方支持且最稳定的方式。关键不是“能不能设”,而是“怎么设才不踩坑”。
必须先创建带子网的自定义网络
Docker 默认的 bridge(即 docker0)不支持手动指定 IP。你得自己建一个网络,并明确划分子网范围:
- 命令示例:
docker network create --subnet=192.168.100.0/24 --gateway=192.168.100.1 mynet -
--subnet是必需项,决定了可用 IP 范围(如192.168.100.2–192.168.100.254) -
--gateway可选,但建议显式指定,避免默认网关冲突 - 网络名(如
mynet)要易记,后续启动容器时需准确引用
启动容器时绑定固定 IP
容器必须连接到你刚创建的自定义网络,且 IP 必须落在该子网内:
- 命令示例:
docker run -d --network=mynet --ip=192.168.100.10 --name web nginx -
--ip只在自定义 bridge 或 overlay 网络中生效,对默认bridge无效 - IP 不能是网关地址(如
192.168.100.1),也不能超出子网范围 - 同一网络中多个容器的 IP 不能重复,否则启动失败
验证和排查常见问题
运行后别急着用,先确认配置是否真正生效:
- 查 IP:
docker inspect web | grep IPAddress或更精准地docker inspect -f '{{.NetworkSettings.Networks.mynet.IPAddress}}' web - 进容器测试:
docker exec -it web ip addr show eth0,看是否为预期地址 - 如果 IP 显示为空或不对,大概率是网络名写错、IP 超出子网、或容器没连对网络
- 重启容器后 IP 不变——这是静态 IP 的核心价值,无需额外操作
进阶:Docker Compose 中设置静态 IP
多容器协同部署时,推荐用 docker-compose.yml 统一管理:
- 先确保网络已存在(
external: true),或由 Compose 自动创建 - 在服务配置中指定:
ipv4_address: 192.168.100.10 - 完整片段示例:
version: '3.8'
services:
app:
image: nginx
networks:
mynet:
ipv4_address: 192.168.100.10
networks:
mynet:
external: true
这样既清晰又可复现,适合团队协作和 CI/CD 流程。


















