通过在docker-compose.yml根层级定义多个独立网络并精确分配服务接入,可实现天然隔离;需显式配置subnet避免ip冲突,跨项目互通须复用external网络,验证时用docker network inspect和ping测试连通性。

直接用 networks 指令定义多个自定义网络,就能让不同服务接入不同网络层,实现天然隔离。关键不是“能不能”,而是“怎么配才不串、不漏、不冲突”。
定义多个独立网络并分配服务
在 docker-compose.yml 根层级声明多个网络,每个服务只连需要的网络,不连的就完全不可达。
- 写法示例:声明
frontend和backend两个桥接网络 - web 服务只挂
frontend,db 只挂backend,中间层 app 同时挂两者,充当通信桥梁 - 同一项目内,未共用网络的服务之间无法通过容器名或 IP 互相访问,连 ping 都不通
指定子网避免地址冲突
默认桥接网络的 IP 范围由 Docker 自动分配,容易在多项目间重叠。显式设置 subnet 可控性更强。
MiniMax 图片理解 + 网络搜索 MCP 工具。适配 Docker 环境(极空间等),支持图片 OCR 识别、图像内容理解、网络搜索。API Key 安全存储在本地 credentials 文件,不暴露在代码中。
- 在
networks下添加ipam配置,例如:- subnet: 172.21.0.0/24 - 可进一步为特定服务固定 IP(如
ipv4_address: 172.21.0.10),适合需稳定寻址的场景 - 不同网络用不同子网段(如
172.21.0.0/24和172.22.0.0/24),彻底杜绝跨网干扰
跨项目互通:复用外部网络
默认情况下,每个 Compose 项目有独立网络命名空间,同名网络也互不相通。要打通,必须共用一个外部网络。
- 先用命令创建可共享网络:
docker network create my-api-net - 在两个项目的
docker-compose.yml中都这样引用: -
networks:default:name: my-api-netexternal: true - 此时两边容器属于同一 L2 网络,可通过服务名(如
api或db)直接通信,无需暴露宿主机端口
验证与调试技巧
配完别急着跑服务,先确认网络结构是否符合预期。
- 运行
docker network ls查看实际创建的网络名(Compose 会自动加前缀,如projectname_frontend) - 用
docker network inspect查容器列表和分配的 IP,确认服务是否真进了目标网络 - 进某个容器执行
ping -c 2,测试 DNS 解析和连通性;失败说明网络没接对或服务名写错










