概述
服务在数据库容器刚创建而非就绪时就启动,导致首次连接失败并陷入重启循环。为依赖提供健康检查、让依赖方等待其健康,可把启动顺序从“看似启动”变为“确认就绪”。
关键步骤
- 为数据库等依赖添加健康检查。
- 对依赖方使用 depends_on 的 service_healthy 条件。
- 让健康检查反映真实就绪而非仅监听端口。
- 验证冷启动按序拉起且无重启。
验证
- 依赖方在依赖健康后才启动。
- 冷启动无重启循环。
- 健康检查反映真实可用性。
- 依赖方向单向无环。
注意事项
- Compose 健康编排适用于本地与简单环境,生产编排有自己的就绪模型。
- 健康检查增加启动延迟,也可能掩盖“在监听但未真正就绪”的应用。
适用范围
本条目围绕「按健康状态编排 Compose 服务」给出可复制的步骤、验证方式与常见问题,适合需要按此流程落地的工程团队。执行时请结合自身上下文调整命令与阈值,并在变更前后留存证据,便于后续复核与回滚。
services:
db:
image: postgres:16
healthcheck:
test: ["CMD-SHELL", "pg_isready -U app"]
interval: 5s
retries: 10
api:
build: .
depends_on:
db: { condition: service_healthy }