下面我给你一份可直接落地 + 原理清晰 + 常见坑全覆盖的讲解
👉 Docker 中设置静态 IP 地址的方式详解
(适合学习 / 实战 / 面试)。
一、先说结论(必须记住)
Docker 只有在「自定义网络」中才能设置静态 IP
默认的 bridge 网络 ❌ 不能指定静态 IP
二、为什么默认 bridge 不能设置静态 IP?
docker network ls
默认网络:
bridge host none
❌ 原因:
- 默认
bridge由 Docker 自动管理 - IP 由 Docker DHCP 自动分配
- 不支持用户指定 IP
📌 解决方案:自定义 bridge 网络
三、方式一:Docker 自定义 bridge 网络(最常用 ⭐⭐⭐⭐⭐)
1️⃣ 创建自定义网络(指定子网)
docker network create \
--subnet 172.18.0.0/16 \
--gateway 172.18.0.1 \
mynet
📌 关键点:
--subnet:网段--gateway:网关mynet:网络名
2️⃣ 启动容器并指定静态 IP
docker run -d \
--name web \
--net mynet \
--ip 172.18.0.10 \
nginx
✅ 成功设置静态 IP
3️⃣ 验证 IP
docker inspect web | grep IPAddress
或进入容器:
docker exec -it web ip addr
4️⃣ 网络结构示意
mynet (172.18.0.0/16)
├── web 172.18.0.10
├── app 172.18.0.11
└── db 172.18.0.12
四、方式二:Docker Compose 设置静态 IP(生产常用 ⭐⭐⭐⭐⭐)
1️⃣ docker-compose.yml 示例
version: "3.9"
networks:
mynet:
driver: bridge
ipam:
config:
- subnet: 172.19.0.0/16
gateway: 172.19.0.1
services:
nginx:
image: nginx
container_name: nginx
networks:
mynet:
ipv4_address: 172.19.0.10
2️⃣ 启动
docker-compose up -d
3️⃣ 优点(为什么推荐)
✅ 可版本管理
✅ 多服务 IP 固定
✅ 易维护
✅ 适合微服务 / 中间件部署
五、方式三:Mac / Windows Docker Desktop(注意 ⚠️)
⚠️ Docker Desktop 本身运行在虚拟机中
结果是:
- 容器静态 IP 只在 Docker 内部生效
- 宿主机无法直接访问该 IP
📌 正确访问方式:
宿主机 → localhost:端口映射
例如:
docker run -p 8080:80 nginx
六、常见错误 & 解决方案(面试爱问)
❌ 错误 1:IP 冲突
Error response from daemon: Address already in use
✅ 解决:
docker network inspect mynet
确认未占用 IP
❌ 错误 2:IP 不在子网范围
invalid IP address
📌 静态 IP 必须属于 subnet
❌ 错误 3:默认网络指定 IP
docker run --ip 172.17.0.10 nginx
💥 必报错
❌ 错误 4:容器重启 IP 变化?
✅ 不会
- 静态 IP = 固定
- 前提:网络不删除
七、方式四:多网络 + 多 IP(高级)
docker network create --subnet 10.0.0.0/24 net1
docker network create --subnet 192.168.0.0/24 net2
docker run -d --name app \
--net net1 --ip 10.0.0.10 \
nginx
docker network connect --ip 192.168.0.10 net2 app
📌 一个容器 → 多网卡 → 多 IP
八、是否真的“需要”静态 IP?(重要建议)
❌ 不推荐场景
- 微服务
- 容器频繁销毁
- 云原生环境
✅ 推荐替代方案(最佳实践)
使用 容器名 / 服务名通信
http://mysql:3306
📌 Docker 内置 DNS
九、面试一句话总结(必背)
Docker 设置静态 IP 必须使用自定义网络或 Docker Compose,
默认 bridge 不支持,
生产环境更推荐使用容器名而非 IP。
发表回复