容器健康诊断报告需人工或脚本整合原始数据生成,docker/kubernetes仅提供结构化健康字段;可通过inspect或kubectl命令提取状态、失败次数、日志等关键信息,并结合探针配置与进程检查输出可读报告。

容器健康诊断报告不是自动生成的文件,而是通过组合检查命令、解析输出、结合状态字段人工或脚本化拼装的结果。Docker 和 Kubernetes 本身不提供“一键导出 PDF 报告”功能,但能提供完整、结构化的原始健康数据,足够支撑诊断结论。
直接获取核心健康状态字段
每个容器在运行时都维护一个实时健康对象,包含状态、失败次数、最近日志等关键信息。用以下命令可快速提取:
-
查当前状态:
docker inspect --format='{{.State.Health.Status}}' <container_name></container_name>(返回starting、healthy或unhealthy) -
查完整健康详情:
docker inspect --format='{{json .State.Health}}' <container_name></container_name>(输出含Status、FailingStreak、Log数组) -
查最近一次检查日志:
docker inspect --format='{{index .State.Health.Log 0 .Output}}' <container_name></container_name>(显示 curl 命令的 stderr 或 stdout)
用脚本组装可读诊断报告
把原始数据转成清晰报告,只需几行 shell 脚本。例如:
- 检查状态是否为
unhealthy,若是,就从Log中提取最后三条错误输出 - 对比
FailingStreak和配置的retries值,判断是否已触发阈值 - 结合
docker ps -f name=<name> --format "{{.Status}}"</name>看整体运行时长和重启次数 - 最终汇总成类似:“状态:unhealthy(连续失败4次,超配置阈值3次);最后错误:curl: (7) Failed to connect to localhost port 8080: Connection refused”
在 Kubernetes 中获取等效信息
K8s 不用 inspect,而是通过资源对象暴露健康信号:
-
查 Pod 探针结果:
kubectl describe pod <pod_name></pod_name>,在 Events 和 Conditions 区域看Readiness/Liveness最后一次结果 -
查探针配置:
kubectl get pod <pod_name> -o yaml | yq '.spec.containers[].livenessProbe'</pod_name>(确认路径、端口、超时是否匹配应用实际) -
查容器真实进程状态:
kubectl exec <pod_name> -- ps aux | grep -v PID</pod_name>,验证主进程是否卡住或异常
补充建议:让报告更有诊断价值
光有“unhealthy”没用,真正帮上忙的是上下文。建议在健康检查命令中主动注入可定位信息:
- HTTP 检查里加
-v或记录响应头:curl -f -I http://localhost:8080/health 2>&1 || exit 1 - TCP 检查用
timeout 2 bash -c 'echo > /dev/tcp/localhost/3306' 2>/dev/null || echo "DB port unreachable" && exit 1 - 自定义脚本中打印依赖服务连通性结果,比如 “Redis: OK, MySQL: timeout after 3s”











