1. 概述
在使用 Docker 容器部署服务时,确保服务的健康状态是构建稳定系统的关键环节之一。Docker 提供了健康检查(health check)机制,帮助我们自动检测容器内服务是否正常运行。
本文将介绍如何在 docker-compose.yml
文件中配置健康检查,并演示两种查看健康检查日志的方法。为了简化示例,我们将使用 Nginx 服务作为演示对象。
2. 初始配置
在深入讲解查看日志的方法之前,我们先来配置一个简单的 docker-compose.yml
文件,其中包含对 Nginx 服务的健康检查配置:
version: '3'
services:
my-web-server:
image: nginx:latest
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost"]
interval: 1m30s
timeout: 10s
retries: 3
这段配置中:
test
:定义了健康检查使用的命令,这里是使用curl
请求本地的 HTTP 服务。interval
:健康检查间隔时间为 1 分钟 30 秒。timeout
:每次检查超时时间为 10 秒。retries
:失败 3 次后标记为 unhealthy。
3. 查看健康检查日志
接下来我们介绍两种实用方法来查看容器的健康检查状态和日志。
3.1 使用 docker ps
查看容器状态
我们可以通过 docker ps
快速查看当前运行的容器状态,包括是否健康:
$ docker ps
输出示例:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8f4038a0c9e7 nginx:latest "/docker-entrypoint.…" 4 mins ago Up 4 mins (unhealthy) 80/tcp my-web-server
⚠️ 注意:STATUS
列中显示的 (unhealthy)
表示当前容器健康检查失败。
3.2 使用 docker inspect
查看详细健康日志
使用 docker inspect
可以获取容器的详细信息,包括健康检查的日志输出。结合 jq
工具可以更清晰地解析 JSON 格式的结果。
查看完整健康信息:
$ docker inspect --format "{{json .State.Health }}" my-web-server | jq
输出示例(服务未运行时):
{
"Status": "unhealthy",
"FailingStreak": 7239,
"Log": [
{
"Start": "2024-04-26T23:34:54.794216092Z",
"End": "2024-04-26T23:35:03.113734054Z",
"ExitCode": 6,
"Output": "curl: (6) Could not resolve host: localhost\n"
}
]
}
✅ 说明:
Status
:当前健康状态。FailingStreak
:连续失败次数。Log
:健康检查的执行日志,包含执行时间、退出码和输出内容。
仅查看日志输出内容:
$ docker inspect --format "{{json .State.Health }}" my-web-server | jq '.Log[].Output'
输出示例:
"curl: (6) Could not resolve host: localhost\n"
这可以帮助我们快速定位健康检查失败的原因,比如 DNS 解析失败、服务未响应等。
4. 总结
通过本文,我们学习了如何在 docker-compose.yml
中配置健康检查,并掌握了两种查看健康检查日志的方法:
- ✅
docker ps
:快速查看容器当前状态。 - ✅
docker inspect + jq
:深入查看健康检查的详细执行日志。
合理使用健康检查机制,不仅可以提升服务的稳定性,还能在服务异常时快速定位问题,是运维 Docker 容器化应用的重要手段之一。