docker容器健康状态需通过healthcheck判断,status列显示(healthy)/(unhealthy)/(starting),inspect可查详细状态、失败次数及日志。

Docker 容器的健康度不能只看 STATUS 列是否显示 Up,真正反映服务是否可用的,是 HEALTHCHECK 触发后的实际状态。它独立于进程存活判断,靠定期执行命令、检查退出码来确认业务是否就绪。
直接查看容器健康状态的方法
运行 docker ps 时,STATUS 列会显示健康信息(如 healthy、unhealthy 或 starting),这是最快速的观察方式:
-
Up About a minute (healthy)→ 正常 -
Up 2 minutes (unhealthy)→ 健康检查连续失败达阈值 -
Up 10 seconds (starting)→ 处于启动宽限期,尚未开始检查
若 STATUS 没显示括号内容,说明该容器未配置 Healthcheck。
用 inspect 查看详细健康信息
执行以下命令可获取结构化结果:
docker inspect --format='{{json .State.Health}}' <container-name-or-id></container-name-or-id>
输出示例:
{
"Status": "healthy",
"FailingStreak": 0,
"Log": [
{
"Start": "2026-07-20T15:22:18.123456789Z",
"End": "2026-07-20T15:22:18.456789012Z",
"ExitCode": 0,
"Output": ""
}
]
}
关键字段说明:
-
Status:当前总体状态(healthy/unhealthy/starting) -
FailingStreak:当前连续失败次数(归零即恢复健康) -
Log:最近几次检查的起止时间、退出码和原始输出(可用于调试失败原因)
常见状态变化逻辑
- 容器刚启动时,状态为
starting,此时即使检查失败也不计入FailingStreak(受--start-period保护) - 第一次检查成功 → 立即变为
healthy - 连续
--retries次失败(每次超时或返回非 0)→ 变为unhealthy - 任一次检查成功 → 立即恢复
healthy,FailingStreak归零
验证健康检查是否生效的小技巧
- 启动容器后等 5–10 秒,再执行
docker ps,看 STATUS 是否从(starting)变为(healthy) - 主动触发一次失败:比如临时停掉应用服务(如
pkill -f nginx),观察 STATUS 是否在几次检查后变成(unhealthy) - 检查
docker inspect输出中的Log,确认ExitCode是否为0(健康)或1(不健康)
不复杂但容易忽略











