You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何docker-compose ps --services显示所有服务而非指定配置文件中的服务?

Docker Compose v2执行ps --services显示所有服务而非指定文件服务的原因及解决办法

问题重现

执行以下命令启动服务:

docker-compose --compatibility -f docker-compose.yml up --scale es01=0 --scale elasticsearch-mapping-init=0 --scale analytics-db=0 

docker-compose --compatibility -f docker-compose.app.yml up --scale autocomplete-service=0 

随后执行:

docker-compose -f docker-compose.app.yml ps --services

预期仅显示docker-compose.app.yml中定义的3个服务,但实际输出了所有启动过的服务:

backoffice-db
booking-ending-db
booking-engine-service
master-service
objectstore-service
profile-service
sagev2-service
supplier-service
directory-db

其中docker-compose.app.yml仅包含master-service、supplier-service、booking-engine-service三个服务。

环境信息:

  • Docker Compose版本:v2.6.0
  • 使用镜像:aws/codebuild/standard:6.0
  • 升级自aws/codebuild/standard:4.0(对应Docker Compose 1.26.0)后出现此问题

原因分析

核心差异来自Docker Compose v1和v2的项目管理模型变化:

  1. Docker Compose v1中,-f参数会直接限定命令作用的配置文件范围,即使同一目录下启动了多个compose文件的服务,执行ps --services时只会显示指定-f文件内的服务。
  2. Docker Compose v2采用了统一的项目概念:所有未通过-p/--project-name指定项目名的服务,都会默认归到以当前目录名称命名的项目中。此时-f参数在ps命令中的作用是加载配置文件来识别项目,但不会过滤服务——只要服务属于该项目,无论来自哪个compose文件,都会被列出。

你先后用两个不同的compose文件启动服务,且都未指定独立的项目名,导致所有服务被归到同一个默认项目下,因此执行ps --services时会显示整个项目的所有服务。

解决办法

方法1:启动服务时指定独立项目名

启动不同compose文件的服务时,通过-p/--project-name参数指定不同的项目名,将服务隔离到不同项目:

# 启动docker-compose.yml的服务,指定项目名main-project
docker-compose -p main-project --compatibility -f docker-compose.yml up --scale es01=0 --scale elasticsearch-mapping-init=0 --scale analytics-db=0 

# 启动docker-compose.app.yml的服务,指定项目名app-project
docker-compose -p app-project --compatibility -f docker-compose.app.yml up --scale autocomplete-service=0 

之后查询docker-compose.app.yml的服务时,指定对应的项目名即可:

docker-compose -p app-project -f docker-compose.app.yml ps --services

方法2:清理现有项目后重新启动(仅适用于测试环境)

如果不需要保留现有服务,可以先停止并移除所有服务,再重新启动目标compose文件的服务(确保只启动该文件的服务,避免混入其他服务到同一项目):

# 停止并移除所有服务
docker-compose down

# 仅启动docker-compose.app.yml的服务
docker-compose --compatibility -f docker-compose.app.yml up --scale autocomplete-service=0 

此时执行docker-compose -f docker-compose.app.yml ps --services就只会显示该文件内的服务。

内容的提问来源于stack exchange,提问作者tuk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 15:10:39