为 Docker Compose 中的服务配置健康检查是确保应用稳定性的关键。下面这个表格汇总了核心的配置参数,帮助你快速上手。
| 参数 | 含义与作用 | 示例值 |
|---|---|---|
test |
定义检查方式的命令,是健康检查的核心 | ["CMD", "curl", "-f", "http://localhost/health"] |
interval |
执行健康检查的时间间隔 | 30s (30秒) |
timeout |
等待健康检查命令响应的超时时间 | 10s (10秒) |
retries |
标记容器为不健康前的连续失败重试次数 | 3 |
start_period |
容器启动后,健康检查的初始宽限期 | 30s (30秒) |
🔧 配置健康检查
健康检查的配置直接写在 docker-compose.yml 文件对应服务的定义下。
基本语法结构
yaml
services:
your-service:
image: your-image
healthcheck:
test: <command> # 用于检查健康状态的命令
interval: 30s # 检查间隔
timeout: 10s # 命令超时时间
retries: 3 # 失败重试次数
start_period: 40s # 启动后等待时间(可选)
不同服务的检查命令示例 健康检查的关键在于为不同服务选择合适的 test 命令。 • Web服务/API:通常通过访问一个健康检查端点(如 /health)来确认。
bash
```yaml
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost/health"] # 使用curl检查端点
# test: ["CMD-SHELL", "wget --quiet --tries=1 --spider http://localhost/ || exit 1"] # 使用wget的另一种写法
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
```
• 数据库服务(如PostgreSQL):可以使用数据库自带的客户端工具进行检查。
bash
```yaml
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER}"] # 使用pg_isready检查PostgreSQL
interval: 30s
timeout: 5s
retries: 3
```
• 自定义脚本:对于更复杂的逻辑,可以运行容器内的一个脚本。
bash
```yaml
healthcheck:
test: ["CMD", "python", "/app/healthcheck.py"] # 执行一个自定义的健康检查脚本
interval: 30s
timeout: 10s
retries: 3
```
🔗 实现服务依赖管理
配置健康检查后,可以确保一个服务(如Web应用)在其依赖的服务(如数据库)真正就绪后才启动。
yaml
services:
database:
image: postgres:latest
healthcheck: ... # 上述数据库的健康检查配置
web-app:
image: my-web-app:latest
depends_on:
database:
condition: service_healthy # 关键:等待database服务健康后再启动
# ... 其他配置
📊 监控与管理健康状况
配置完成后,可以通过以下命令监控服务的健康状态: • 查看服务状态:使用 docker compose ps 或 docker ps 查看每个容器的状态,会明确显示 healthy(健康)、unhealthy(不健康)或 starting(启动中)。
• 查看详细日志:使用 docker compose logs [service-name] 可以帮助诊断健康检查失败的原因。
🔄 自动重启不健康容器
对于生产环境,可以配置自动重启策略,当健康检查失败时自动重启容器,以提高服务的自愈能力。
yaml
services:
your-service:
image: your-image
healthcheck: ... # 你的健康检查配置
restart: unless-stopped # 或 on-failure
# 推荐使用 `unless-stopped` 或 `on-failure`,这样在容器因不健康退出时,Docker守护进程会自动重启它。
💎 核心要点
为Docker Compose服务配置健康检查,关键在于定义有效的检查命令(test),并设置合理的间隔(interval)、超时(timeout)和重试次数(retries)。结合 depends_on的service_healthy条件,可以可靠地管理服务依赖关系。通过配置restart` 策略,还能实现不健康容器的自动恢复。