使用Docker Compose指定profile执行stop/rm时为何停止所有服务?
问题分析与解决方案
原因
你遇到的是Docker Compose旧版本的行为问题:在Docker Compose v2.8之前,stop/rm这类命令默认会作用于所有服务,即使指定了--profile参数,而up命令的profile逻辑是正常的。你的Docker版本是20.10.17,配套的Compose版本大概率低于v2.8,因此出现了这种行为不一致的情况。
解决方案
1. 升级Docker Compose到新版本
升级到v2.8及以上版本后,--profile参数会正确作用于stop/rm命令,仅操作对应profile下的服务。升级方式:
- Docker Desktop用户直接更新Docker Desktop即可同步升级Compose。
- Linux系统可通过官方脚本安装最新版:
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose
2. 临时替代方案(不升级)
如果暂时无法升级,可直接指定要操作的服务名称,避免影响其他服务:
- 停止
registry_service_profile的服务:
sudo docker compose stop registry
- 停止
other_services_profile的服务:
sudo docker compose stop portainer pihole bitwarden homeassistant duplicati
3. 关于镜像更新
无需执行全局docker compose up来更新镜像,针对指定profile加上--pull always参数即可,只会拉取并重启该profile下的服务:
# 更新registry服务的镜像 sudo docker compose --profile registry_service_profile up --detach --pull always # 更新other_services_profile下的所有服务镜像 sudo docker compose --profile other_services_profile up --detach --pull always
内容的提问来源于stack exchange,提问作者Ionut
相关产品推荐
相关产品推荐

