docker通过自定义bridge网络的--ip-range参数实现“固定ip地址池”,即限定容器可分配ip的有效区间(如172.20.5.0/24),该范围用于校验--ip指定值或动态分配,确保ip不越界、不冲突。

Docker 本身不提供“IP 地址池”的配置界面或管理命令,但你可以通过自定义 bridge 网络 + --ip-range 参数,实现对容器可分配 IP 范围的精确控制——也就是你所说的“固定 IP 地址池”。
这个地址池不是用来自动分配、而是用来限制哪些 IP 可被 --ip 显式指定(或由 Docker 在无 --ip 时从中动态分配),核心在于:
✅ 它定义了该网络中合法可用的 IP 区间;
❌ 不代表 Docker 会自动轮询分配;
⚠️ 若你始终用 --ip 指定地址,那 --ip-range 主要是起校验和保护作用(防止误配冲突或越界)。
创建带地址池的自定义 bridge 网络
运行以下命令创建一个子网明确、并限定可用 IP 区间的网络:
docker network create \ --driver bridge \ --subnet=172.20.0.0/16 \ --gateway=172.20.0.1 \ --ip-range=172.20.5.0/24 \ my-static-net
-
--subnet=172.20.0.0/16:整个网络的 CIDR 范围(65534 个地址) -
--ip-range=172.20.5.0/24:实际允许分配的地址池(254 个地址:172.20.5.1 ~ 172.20.5.254) -
--gateway=172.20.0.1:网关地址(必须在--subnet内,但不在--ip-range中也没关系)
✅ 这个
--ip-range就是你想要的“固定 IP 地址池”——后续所有--ip指定值都必须落在该范围内,否则启动失败。
minimax-mcp-docker版(适配极空间)下载MiniMax 图片理解 + 网络搜索 MCP 工具。适配 Docker 环境(极空间等),支持图片 OCR 识别、图像内容理解、网络搜索。API Key 安全存储在本地 credentials 文件,不暴露在代码中。
启动容器时使用地址池内的 IP
只要 IP 在 172.20.5.0/24 内(且未被占用),就能成功绑定:
docker run -d \ --name app1 \ --network my-static-net \ --ip 172.20.5.10 \ nginx:alpine docker run -d \ --name app2 \ --network my-static-net \ --ip 172.20.5.11 \ redis:alpine
? 验证方式:
docker inspect app1 | jq '.NetworkSettings.Networks["my-static-net"].IPAddress'
输出应为"172.20.5.10"
补充说明:地址池与实际使用的关系
- 如果你不指定
--ip,Docker 会从--ip-range中自动选一个空闲地址(类似 DHCP); - 如果你始终指定
--ip,--ip-range的作用是:- 拒绝非法 IP(如
172.20.10.100超出范围 → 报错); - 避免和宿主机、其他网络冲突(靠
--subnet保证); - 便于团队约定:比如“所有业务容器 IP 固定在
172.20.5.x段”。
- 拒绝非法 IP(如
Docker Compose 中等效写法
version: '3.8'
services:
web:
image: nginx
networks:
mynet:
ipv4_address: 172.20.5.10
networks:
mynet:
driver: bridge
ipam:
config:
- subnet: 172.20.0.0/16
gateway: 172.20.0.1
ip_range: 172.20.5.0/24 # ← 这就是地址池定义
注意:ip_range 是 ipam.config 下的字段,不是 service 级别参数。
不复杂但容易忽略。关键就三点:子网划清边界、ip-range 锁定可用段、启动时 --ip 必须落在其中。











