生产环境容器巡检需固化到生命周期各环节:镜像中预埋健康脚本并配置HEALTHCHECK;Kubernetes中复用脚本适配liveness/readiness探针;配合外部脚本实现批量状态检查、自动恢复与告警闭环。
在生产环境中,靠人工逐台检查容器状态既低效又不可靠。真正可行的做法,是把巡检逻辑固化进容器生命周期各环节——从镜像构建、容器启动,到运行中持续探测、异常后自动响应,全程由脚本驱动。
在镜像中预埋可执行的健康检查入口
不是临时进容器跑命令,而是把诊断能力“焊死”在镜像里。用 COPY 把 Shell 或 Python 巡检脚本(如 /health/health.sh)复制进镜像固定路径,用 RUN chmod +x 赋予执行权限。若脚本依赖 jq、curl 或 Python 包(如 psutil),必须在 Dockerfile 中一并安装。所有路径写绝对路径,不读宿主机文件,确保环境一致。
用 HEALTHCHECK 指令启用自动周期探测
Docker 原生支持健康自检。在 Dockerfile 中添加:
HEALTHCHECK --interval=30s --timeout=5s --start-period=60s --retries=3 CMD /health/health.sh其中 start-period=60s 给应用冷启动留缓冲时间,避免刚起来就被判失败;retries=3 表示连续三次失败才标记为 unhealthy。该指令不影响容器是否运行,但能让 docker ps 显示实时健康状态,也方便后续对接监控系统。
适配 Kubernetes 探针与运维流程
同一套脚本要能被多场景复用:
- livenessProbe 用轻量检查:只验证进程存活、端口通、HTTP 状态码 200
- readinessProbe 加深度检查:连数据库、查缓存、调用内部 metrics 接口
- 提供 HTTP 健康端点(如用 Flask 启一个
/healthz),供 Ingress 或 Prometheus 抓取 - 脚本支持运行时参数,例如
--mode=deep或--output=json,便于人工调试或 CI/CD 流水线调用
配合外部自动化脚本做批量巡检与恢复
单个容器健康只是基础,生产需要集群视角的闭环管理:
- 写 Shell 脚本遍历
docker ps -q获取所有容器 ID,对每个执行docker inspect --format='{{.State.Health.Status}}'批量汇总状态 - 发现 unhealthy 容器,自动触发日志采集(
docker logs --since 10m)、资源快照(docker stats --no-stream) - 按策略执行恢复动作:重启容器、拉起备用实例、或发告警并暂停流量(配合服务网格)
- 将巡检结果生成 Markdown 或 JSON 报告,存入共享目录或推送到钉钉/企微机器人











