如何在不影响其他运行服务的情况下缩放Docker Compose服务?
Docker Compose 缩放服务时不停止现有运行服务的解决方法
问题原因
你的docker-compose.yml中app、db、adminer的deploy.replicas都设为0,当执行docker compose up -d --scale adminer=1时,Compose会强制同步所有服务到配置文件定义的状态——将app和db的副本数改回0,导致它们被停止。
解决方法
方法一:使用docker compose update单独缩放目标服务
该命令仅修改指定服务的副本数,不会干扰其他已运行的服务:
# 启动adminer docker compose update --scale adminer=1 # 停止adminer(缩为0副本) docker compose update --scale adminer=0
方法二:用Profiles管理手动启动服务
修改docker-compose.yml,移除deploy.replicas: 0配置,改用profiles标记需要手动启动的服务,默认情况下这些服务不会被Compose自动处理:
services: other: # ... 保留原有配置 app: # ... 保留原有配置(删除deploy.replicas:0) depends_on: - db profiles: ["manual-services"] db: # ... 保留原有配置(删除deploy.replicas:0) profiles: ["manual-services"] adminer: # ... 保留原有配置(删除deploy.replicas:0) profiles: ["manual-services"]
之后操作服务的命令:
# 启动app和db docker compose up -d app db # 启动adminer(不会影响已运行的app和db) docker compose up -d adminer # 一次性启动所有手动标记的服务 docker compose --profile manual-services up -d
内容的提问来源于stack exchange,提问作者lonix
相关产品推荐
相关产品推荐

