docker inspect 提取容器健康状态需定位 .state.health 字段,用 --format='{{.state.health.status}}' 获取 healthy/unhealthy/starting;完整详情用 json 格式查看 failingstreak 和 log;配置检查用 .config.healthcheck;脚本中建议用 jq 或条件判断防报错。
直接用 docker inspect 提取容器健康检查状态,关键在于定位到 .state.health 这个嵌套字段——它只存在于已配置健康检查且正在运行的容器中,反映的是 docker 守护进程当前维护的实时探测结果。
快速提取健康状态字符串
最常用、最轻量的方式是用 --format 直接输出状态值:
-
docker inspect --format='{{.State.Health.Status}}' nginx-web→ 返回 healthy、unhealthy 或 starting -
docker inspect --format='{{.State.Status}}' nginx-web→ 返回容器整体生命周期状态,如 running、exited,注意这和健康状态不同
查看完整健康详情(含日志与时间戳)
当需要排查失败原因时,建议用 json 格式展开整个 Health 对象:
docker inspect --format='{{json .State.Health}}' nginx-web- 输出示例:{"Status":"unhealthy","FailingStreak":5,"Log":[{"Start":"2026-05-08T16:22:11.123Z","End":"2026-05-08T16:22:11.456Z","ExitCode":1,"Output":"curl: (7) Failed to connect to localhost port 8080"}]}
- 其中
FailingStreak表示连续失败次数,Log最后一条记录包含实际错误输出,是调试核心依据
结合健康检查配置一起看
仅看运行时状态不够,常需对照原始配置判断是否参数不合理:
- 查配置:
docker inspect --format='{{json .Config.Healthcheck}}' nginx-web - 重点关注
Test(执行命令)、Interval、Timeout、Retries和StartPeriod - 若
StartPeriod过短(如设为 10s),而应用实际启动要 25s,就会在宽限期结束前被误判为 unhealthy
自动化脚本中安全提取的建议
避免因容器未配置健康检查导致模板渲染报错:
- 加条件判断:
docker inspect --format='{{if .State.Health}}{{.State.Health.Status}}{{else}}no-healthcheck{{end}}' nginx-web - 或先检查字段是否存在:
docker inspect nginx-web | jq -r '.[0].State.Health.Status // "n/a"'(需安装 jq) - 生产环境脚本推荐统一用 jq 处理,容错性更强,也便于后续解析 Log 字段











