容器生命周期巡检核心是定期调用Docker API或CLI获取Status、Health、RestartCount等字段交叉验证状态,Shell/Python脚本即可实现,需关注退出码、健康检查失败、高频重启等真实故障信号。

用脚本自动化巡检容器生命周期状态,核心是定期调用容器运行时接口(如 Docker API 或 docker CLI)获取关键状态字段,并做逻辑判断与告警。不需要复杂框架,一个轻量 Shell 或 Python 脚本就能覆盖大部分场景。
抓取关键生命周期状态字段
容器是否健康不能只看 STATUS 是不是 Up,要结合多个字段交叉验证:
-
Status:原始状态字符串(如
Up 2 hours、Exited (137) 5 minutes ago),需正则提取运行时长、退出码 -
Health:Docker 1.12+ 健康检查结果(
healthy/unhealthy/starting),优先级高于 Status -
RestartCount:通过
docker inspect获取,高频重启(如 5 分钟内 >3 次)大概率存在启动失败或崩溃 - Created / StartedAt / FinishedAt:判断容器是否长时间未启动、或反复启停
Shell 脚本示例(轻量实用)
以下脚本每 30 秒检查一次指定容器,异常时记录日志并触发简单通知(可替换为邮件、Webhook):
MiniMax 图片理解 + 网络搜索 MCP 工具。适配 Docker 环境(极空间等),支持图片 OCR 识别、图像内容理解、网络搜索。API Key 安全存储在本地 credentials 文件,不暴露在代码中。
#!/bin/bash
CONTAINER_NAME="my-app"
LOG_FILE="/var/log/container-health.log"
NOW=$(date '+%Y-%m-%d %H:%M:%S')
<h1>获取基础状态</h1><p>STATUS=$(docker ps -f name=^$CONTAINER_NAME$ --format "{{.Status}}" 2>/dev/null)
HEALTH=$(docker inspect "$CONTAINER_NAME" 2>/dev/null | jq -r '.[0].State.Health.Status' 2>/dev/null)</p><h1>判断逻辑</h1><p>if [[ -z "$STATUS" ]]; then
echo "[$NOW] ERROR: Container '$CONTAINER_NAME' not found" >> "$LOG_FILE"
exit 1
fi</p><p>if [[ "$HEALTH" == "unhealthy" ]]; then
echo "[$NOW] ALERT: Container '$CONTAINER_NAME' is unhealthy" >> "$LOG_FILE"</p><h1>可在此添加 docker restart 或 curl 发送告警</h1><p>elif [[ "$HEALTH" == "starting" ]] && [[ "$STATUS" =~ "Up [0-9]+ seconds" ]]; then
echo "[$NOW] WARN: '$CONTAINER_NAME' still starting, check health timeout" >> "$LOG_FILE"
elif [[ "$STATUS" =~ "Exited " ]]; then
EXIT_CODE=$(echo "$STATUS" | grep -o 'Exited ([0-9]+)' | grep -o '[0-9]+')
echo "[$NOW] CRITICAL: '$CONTAINER_NAME' exited with code $EXIT_CODE" >> "$LOG_FILE"
fi
进阶建议:对接 Prometheus + Grafana
若已有监控体系,推荐用 dockerd 自带的 metrics endpoint 或 Telegraf Docker 插件 采集指标:
- 容器 Up 时间(
container_up_seconds) - 重启次数(
container_restarts_total) - 健康检查失败次数(
container_health_status{status="unhealthy"}) - 设置 Grafana 告警规则,比如 “过去 5 分钟内 unhealthy 状态持续 >60s”
注意容器编排环境的适配
在 Kubernetes 中,不要直接操作底层容器,应巡检 Pod 状态:
- 用
kubectl get pod -o wide查STATUS(Running/CrashLoopBackOff/Pending) - 用
kubectl describe pod查Events和容器Ready、Restart Count - 健康探针(liveness/readiness)失败会体现在
Conditions字段,比单纯看进程更可靠
脚本自动化巡检的本质是把人工判断逻辑代码化,重点不在多炫技,而在覆盖真实故障信号——比如退出码 137(OOMKilled)、健康检查超时、反复重启。从一条 Shell 开始,逐步加上日志归档、分级告警、可视化,就是一套可用的容器生命周期巡检方案。

















