首页/云/云与容器速查/Compose 项目名与多环境共存
容器与 Docker106 条

Compose 项目名与多环境共存

项目名决定容器、网络、卷的前缀:同名服务在不同项目名下互不干扰。用 -p 或 COMPOSE_PROJECT_NAME 区分开发/测试环境,实现同机多栈。

云与容器速查云更新于 2026-10-13

项目名决定资源前缀

Compose 项目名决定了容器、网络与数据卷的名称前缀,因此同名服务在不同项目名下可以互不干扰。用命令行参数或环境变量区分开发与测试环境,就能在同一台机器上运行多套互不冲突的栈,这是本地多环境隔离中最省事的做法。

基本信息

默认值compose 文件所在目录名,并做小写化处理
显式指定docker compose -p 项目名 up -d
环境变量用项目名环境变量统一指定,适合写进脚本
文件内声明顶层 name 字段;命令行参数优先级更高
命名影响容器名为项目名加服务名加序号,网络与卷同样带前缀
清理范围down 只清理当前项目,其他项目不受影响

典型使用场景

  • 同一台机器同时运行开发与测试两套环境
  • 同一份编排在多个分支或版本上并行验证
  • 演示环境与个人实验环境共存互不干扰
  • 为不同客户部署相同技术栈但需要互相隔离
  • 按项目维度整体回收资源,避免影响其他环境

同机跑两套环境

同机跑两套环境
COMPOSE_PROJECT_NAME=shop-dev docker compose up -d
COMPOSE_PROJECT_NAME=shop-staging docker compose up -d
docker compose -p shop-dev ps                       # 查指定项目的实例
docker compose -p shop-dev down                     # 只清理该项目
docker volume ls --filter label=com.docker.compose.project=shop-dev   # 查看该项目卷

名称影响

资源命名规则注意事项
容器项目名加服务名加序号项目名相同会导致同名容器冲突
网络项目名加网络名默认网络按项目隔离
卷项目名加卷名数据按项目隔离,切换项目后看不到旧数据
标签带项目相关标签便于按项目筛选与批量清理
清理down 只影响当前项目旧项目残留需要单独清理
down 只清理当前项目:切换项目名部署之后,旧项目残留的容器、网络与卷要单独清理,否则会持续占用端口与磁盘,时间一长自己也说不清哪些还在用。
复制目录起第二套环境是最常见的踩坑方式:目录名相同会导致默认项目名相同,容器名冲突直接失败;若按新目录名生成了新项目名,旧的卷带旧前缀找不到,表现为「数据凭空消失」。

易错点

  • 复制目录起第二套环境却没改项目名:容器名冲突,部署直接失败
  • 用 down 期待清空全部环境:只清理当前项目,其他项目的资源仍在运行
  • 项目改名后配不上旧数据:卷名带旧项目前缀,需要显式指定卷名或迁移数据
  • 找不到旧项目的网络与卷:它们带旧前缀,不会自动清理也不会自动识别

数据来源与参考

  • Docker Docs:Compose project name

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌