Compose多租户隔离核心是为每个租户划出独立、可约束、可销毁的运行边界,通过租户级服务组+独立网络、隔离存储卷、cgroups v2资源硬限制、参数化模板及可观测性打标四层实现逻辑与资源双重隔离。

Compose 编排管理多租户容器隔离,核心不是“让多个租户共享一套服务”,而是为每个租户划出独立、可约束、可销毁的运行边界。它不依赖 Kubernetes 的复杂调度,而是靠声明式配置把网络、存储、资源和命名空间四层隔离做实。
租户级服务组 + 独立网络
每个租户对应一组带前缀的服务(如 tenant-a-api、tenant-a-db),并绑定专属网络:
- 在
docker-compose.yml中定义独立 network,例如tenant-a-net,驱动设为bridge,禁用外部互通 - 所有该租户服务都只接入此网络,不挂载默认
default网络 - 服务间通过服务名(如
tenant-a-db)直接通信,无需暴露端口或配置 DNS - 不同租户的服务因网络不重叠,默认无法互相访问,连 ping 都不通
隔离存储卷 + 挂载路径硬隔离
文件系统层面杜绝数据混用:
MiniMax 图片理解 + 网络搜索 MCP 工具。适配 Docker 环境(极空间等),支持图片 OCR 识别、图像内容理解、网络搜索。API Key 安全存储在本地 credentials 文件,不暴露在代码中。
- 为每个租户声明专属 volume,如
tenant-a-data,并在服务中显式挂载到固定路径(如/app/data) - 避免使用
./data这类相对宿主机路径——它会跨租户污染 - 数据库类服务建议采用单实例多 schema 方案(如 PostgreSQL 的
CREATE SCHEMA tenant_a),再配合 volume 隔离配置与日志目录 - 敏感配置(如密钥、证书)通过
secrets或env_file按租户加载,不进镜像也不共享
资源硬限制 + cgroups v2 约束
防止单个租户吃尽宿主机资源:
- 在 service 下配置
deploy.resources.limits:内存设memory: "512M"(超限触发 OOM kill),CPU 设cpus: "1.5"(非核数,是时间片配额) - 搭配
reservations预留基础资源,保障响应不卡顿 - 宿主机需启用 cgroups v2(启动参数含
systemd.unified_cgroup_hierarchy=1),Docker daemon 启动时指定--cgroup-manager=systemd - 验证方式:进入容器执行
cat /sys/fs/cgroup/memory.max和cat /sys/fs/cgroup/cpu.max,应返回对应限制值
参数化模板 + 租户自助生命周期管理
避免手动复制粘贴配置,实现快速启停:
- 用
.env定义TENANT_ID=dev-team-1,在 compose 文件中引用${TENANT_ID}控制服务名、网络名、volume 名 - 配套
up.sh脚本:自动替换镜像 tag、生成租户密钥、注入 DB schema 初始化脚本 - 用
docker compose --project-name tenant-dev-team-1 down -v可彻底清理该租户全部容器、网络、volume - 可观测性层面打标:所有日志、指标加
tenant_id="dev-team-1"label,便于按租户过滤和告警

















