返回 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