在 Docker Compose 中,healthcheck
是一个用于检测服务健康状态的配置项。通过配置健康检查,可以确保服务在运行时处于健康状态,并在服务出现问题时及时进行处理。
配置示例
version: '3.8' services: web: image: nginx healthcheck: test: ["CMD", "curl", "-f", "http://localhost"] interval: 30s timeout: 10s retries: 3 start_period: 40s
配置参数
- test: 指定用于检查健康状态的命令。例如,
curl -f http://localhost
检查nginx
服务是否正常响应 HTTP 请求。 - interval: 两次健康检查之间的间隔时间,默认是
30s
。 - timeout: 每次健康检查的超时时间,默认是
10s
。 - retries: 在标记服务为不健康之前,健康检查失败的重试次数,默认是
3
。 - start_period: 服务启动后的初始宽限期,在此期间健康检查结果不会影响服务的健康状态,默认是
40s
。
不健康状态处理
如果服务被标记为不健康,Docker 会执行以下操作:
- 容器状态: 使用
docker ps
可以查看服务的健康状态。状态为unhealthy
表示服务不健康。 - 编排工具: Docker Swarm 或 Kubernetes 等编排工具可以根据服务的健康状态做出反应,例如重新启动不健康的容器或将流量切换到健康实例。
- 依赖服务: 依赖此服务的其他服务可能受到影响。
检查健康状态命令
- 查看容器状态:
docker ps
示例输出:CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1234567890ab nginx "/docker-entrypoint.…" 2 minutes ago Up 2 minutes (unhealthy) 80/tcp myproject_web_1
- 查看详细健康状态信息:
docker inspect --format='{{json .State.Health}}' <container_id>
示例输出:{ "Status": "unhealthy", "FailingStreak": 3, "Log": [ { "Start": "2024-06-21T12:00:00.000000000Z", "End": "2024-06-21T12:00:10.000000000Z", "ExitCode": 1, "Output": "..." }, ... ] }
通过合理配置 healthcheck
,可以确保服务始终处于健康状态,并在发现问题时及时处理,提高应用的高可用性和稳定性。