核心是为每个业务域分配互不重叠的专属子网段并闭环管理:规划(如frontend/172.21.0.0/24)、定义(docker-compose中显式声明subnet与gateway)、绑定(服务仅接入所需网络)、验证(ping测试隔离与通路),禁用host模式及手动路由,确保天然隔离。
多服务编排中分配独立子网段实现访问隔离,核心是让每个业务域或服务组拥有互不重叠的 ip 地址空间,并通过网络拓扑控制通信路径。不是简单“加个 subnet”,而是从规划、定义、绑定到验证闭环操作。
按业务域划分专属子网段
先明确哪些服务属于同一逻辑单元(如 frontend、backend、monitor),再为每组分配不重叠的 CIDR 段。推荐使用 172.16.0.0/12 私有地址空间中的连续 /24 或 /25 子网:
- frontend 网络:172.21.0.0/24
- backend 网络:172.22.0.0/24
- monitor 网络:172.23.0.0/24
避免用默认的 172.17.0.0/16 或 Docker 自动分配范围,防止跨项目冲突。
在 docker-compose.yml 中显式声明带子网的网络
根级 networks 块中定义每个网络并指定 subnet 和可选 gateway:
networks:
frontend:
driver: bridge
ipam:
config:
- subnet: 172.21.0.0/24
gateway: 172.21.0.1
backend:
driver: bridge
ipam:
config:
- subnet: 172.22.0.0/24
gateway: 172.22.0.1
服务只接入所需网络,例如 API 层同时挂两个网络,Web 和 DB 各挂一个:
MiniMax 图片理解 + 网络搜索 MCP 工具。适配 Docker 环境(极空间等),支持图片 OCR 识别、图像内容理解、网络搜索。API Key 安全存储在本地 credentials 文件,不暴露在代码中。
- web → 只连 frontend
- api → 连 frontend + backend
- db → 只连 backend
禁止跨网段自动路由,确保天然隔离
Docker 默认不会在不同自定义桥接网络间转发流量,这是隔离的基础。但要注意两点:
- 不给服务配置 network_mode: host 或 network_mode: container:,否则绕过网络层隔离
- 避免在宿主机上手动添加路由规则(如 ip route add)打通不同子网,除非明确需要有限互通
验证方式:进入 web 容器执行 ping db 应失败;进入 api 容器执行 ping db 应成功——说明隔离与通路均按预期生效。
需要跨项目互通时复用 external 网络
若多个 docker-compose 项目需共享某类服务(如统一日志收集器或配置中心),不能靠同名网络,必须提前创建 external 网络:
- 宿主机执行:docker network create --driver bridge --subnet=172.30.0.0/24 logging-net
- 各项目中声明:logging-net: external: true
- 对应服务加入该网络即可互通,其他网络仍保持各自子网隔离










