开发环境隔离主要靠项目名称作为命名空间,通过-p参数、git分支动态生成或.env文件统一设置唯一项目名,确保服务、网络、卷、容器名自动带前缀互不干扰,并须遵守小写字母、数字、短横线、下划线的命名规则。
开发环境隔离主要靠项目名称(project name)作为命名空间,把不同分支、不同功能或不同配置的容器组完全隔离开。关键在于让每个实例拥有独立的项目名,这样服务名、网络名、卷名和容器名都会自动带上前缀,互不干扰。
用 -p 参数为每次启动指定唯一项目名
这是最直接、最常用的方式,适合临时切换或 CI/CD 场景:
- 功能分支 A 启动:
docker compose -p feature-login up -d - 功能分支 B 启动:
docker compose -p feature-payment up -d - 本地调试新配置:
docker compose -p dev-v2 up -d
执行后,容器名会变成 feature-login_web_1、feature-payment_db_1 等,网络名是 feature-login_default,卷也自动归属该项目,不会与其他实例混用。
按 Git 分支名自动设置项目名
避免手动输错,可在脚本中动态获取当前分支并传入:
- Linux/macOS:
docker compose -p "dev-$(git rev-parse --abbrev-ref HEAD)" up -d - Windows PowerShell:
docker compose -p "dev-$(git rev-parse --abbrev-ref HEAD)" up -d
这样 checkout 到 main 就是 dev-main,切到 fix/cache 就是 dev-fix-cache,命名清晰且可追溯。
配合 .env 文件统一管理项目名
在项目根目录放一个 .env 文件,内容为:
之后所有 docker compose up 命令都会默认使用这个名称,无需每次加 -p。适合长期维护的特性分支环境,也方便团队共享一致配置。
注意命名规则和常见陷阱
项目名不是随便起的,必须满足:
- 只含小写字母、数字、短横线(
-)和下划线(_) - 不能以短横线或下划线开头
- 避免空格、大写字母、点号(
.)、斜杠(/)等非法字符 - 如果用了非法字符,Compose 会静默回退到目录名,容易导致意外冲突
例如 docker compose -p my-feature.2024 up 会失败,应写成 my-feature-2024。











