← 中文资源

简体中文版本

按健康状态编排 Compose 服务

添加健康检查与 depends_on 条件,使依赖数据库的服务等待其健康而非仅启动。

阅读英文原文

概述

服务在数据库容器刚创建而非就绪时就启动,导致首次连接失败并陷入重启循环。为依赖提供健康检查、让依赖方等待其健康,可把启动顺序从“看似启动”变为“确认就绪”。

关键步骤

  1. 为数据库等依赖添加健康检查。
  2. 对依赖方使用 depends_on 的 service_healthy 条件。
  3. 让健康检查反映真实就绪而非仅监听端口。
  4. 验证冷启动按序拉起且无重启。

验证

  • 依赖方在依赖健康后才启动。
  • 冷启动无重启循环。
  • 健康检查反映真实可用性。
  • 依赖方向单向无环。

注意事项

  • 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 }