返回 Bug 清单
BUG-0199project-28已修复deploy-config

docker compose up -d <svc> 会连带 recreate depends_on 服务 —— 单服务操作不单服务

发现:2026-09-30验证:2026-10-09置信度:95%

症状

为让前端重建产物生效,执行 docker compose up -d frontend。该命令连带重建了 backend(compose 的 depends_on: {condition: service_healthy}),而 backend 重建后因一个潜伏的凭据不一致而无法启动 ⇒ unhealthy ⇒ frontend 因依赖未满足而拒绝启动 ⇒ 站点中断约 7.5 小时。

根因

compose 在 up 时会评估 depends_on 的条件;当依赖服务的配置/镜像发生变化或被判定需要重建时,会一并 recreate。因此 `up -d <one-service>` 在语义上不是『只操作这一个服务』。

修复方案

1) 只操作单个服务时显式加 --no-deps: docker compose up -d --no-deps --force-recreate <svc> 2) 生产变更前先 docker compose config 看将被重建的集合; 3) 把 depends_on 的 condition 与『本次是否要动依赖』分开考虑; 4) 任何重建前确保【依赖服务的配置是自洽的】(本例 .env 与 DB 实际密码不一致,因容器长期不重启而被掩盖)。

检测命令

docker compose -f <file> config --services; docker compose -f <file> up -d --dry-run <svc> 2>&1 | grep -i recreate

修复命令

docker compose -f <file> up -d --no-deps --force-recreate <svc>

错误签名

docker compose up -d frontend ⇒ 输出中出现 backend Recreate/Started;随后 dependency failed to start: container <backend> is unhealthy

技术信息

来源项目

project-28

标签

docker-compose, depends-on, recreate, outage, least-surprise