菜鸟-创作你的创作

Docker中设置静态IP地址方式

下面我给你一份可直接落地 + 原理清晰 + 常见坑全覆盖的讲解
👉 Docker 中设置静态 IP 地址的方式详解
(适合学习 / 实战 / 面试)。


一、先说结论(必须记住)

Docker 只有在「自定义网络」中才能设置静态 IP
默认的 bridge 网络 ❌ 不能指定静态 IP


二、为什么默认 bridge 不能设置静态 IP?

docker network ls

默认网络:

bridge   host   none

❌ 原因:

📌 解决方案:自定义 bridge 网络


三、方式一:Docker 自定义 bridge 网络(最常用 ⭐⭐⭐⭐⭐)

1️⃣ 创建自定义网络(指定子网)

docker network create \
  --subnet 172.18.0.0/16 \
  --gateway 172.18.0.1 \
  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 本身运行在虚拟机中

结果是:

📌 正确访问方式:

宿主机 → 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(高级)

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。

退出移动版