最有效方式是显式声明自定义桥接网络子网,需避开宿主机及物理网络常用网段(如192.168.x.x、10.x.x.x、172.16–31.x.x),推荐使用172.20.0.0/16等RFC 1918私有地址,并通过networks.ipam.config.subnet严格配置CIDR格式子网。

直接在 docker-compose.yml 中显式声明自定义桥接网络的子网范围,是防范与线下物理网络冲突最有效、最可控的方式。关键不在于“能不能”,而在于“选对网段”和“写对格式”。
选一个物理网络不使用的私有网段
先确认你所在局域网(如公司内网、家庭路由器)实际使用的 IP 段,常见物理网络网段包括:
- 家庭宽带:192.168.1.0/24、192.168.0.0/24、10.0.0.0/24
- 企业办公网:10.10.0.0/16、172.16.0.0/12(注意:Docker 默认常用 172.17–172.31.x.x)
- 云主机 VPC:常为 10.0.0.0/8 或 172.16.0.0/12 的某子集
避开这些范围,推荐选用:172.20.0.0/16、172.21.0.0/16 或更小粒度的 172.20.100.0/24 ——它们属于 RFC 1918 私有地址,又远离 Docker 默认分配的 172.17.0.0/16 和宿主机常见网段。
在 docker-compose.yml 中正确声明子网
必须通过 networks 下的 ipam.config.subnet 显式指定 CIDR 表达式,不能只靠服务名或默认行为。示例如下:
MiniMax 图片理解 + 网络搜索 MCP 工具。适配 Docker 环境(极空间等),支持图片 OCR 识别、图像内容理解、网络搜索。API Key 安全存储在本地 credentials 文件,不暴露在代码中。
version: '3.8'
services:
web:
image: nginx
networks:
app-net:
ipv4_address: 172.20.100.10
db:
image: postgres
networks:
app-net:
ipv4_address: 172.20.100.11
<p>networks:
app-net:
driver: bridge
ipam:
config:</p><ul><li>subnet: 172.20.100.0/24
gateway: 172.20.100.1
注意三点:
-
subnet是必需字段;gateway虽非强制,但建议显式设置,便于调试和对接防火墙规则 - 子网掩码用 CIDR 表示(如
/24),对应 255.255.255.0,可用 IP 数为 254 个 - 固定 IP(如
ipv4_address)必须落在该子网范围内,否则启动失败
验证是否真正隔离无冲突
部署前执行两步检查:
- 运行
docker network ls查看当前所有网络,确认没有其他项目已占用172.20.100.0/24 - 运行
ip addr show(Linux)或ifconfig(macOS)检查宿主机网卡是否使用了同网段 IP - 启动后执行
docker network inspect app-net,核对Subnet和Gateway是否与配置一致
若发现冲突,立即换用另一个未被占用的网段(如升至 /23 或切换到 172.21.0.0/24),不要强行复用。
生产环境建议加一层防御性配置
对于多团队共用一台宿主机的场景,可进一步限制 IP 分配池,避免未来扩容时越界:
- 用
ip_range限定容器实际获取 IP 的范围,例如:- subnet: 172.20.100.0/24ip_range: 172.20.100.32/27(仅开放 32–62 共 30 个地址) - 禁用默认桥接网络:在 Docker daemon.json 中设
"default-address-pools": [{"base":"172.21.0.0/16","size":24}],让所有未指定子网的项目自动落入安全区间

















