Docker守护进程不直接告警,但可通过HEALTHCHECK、事件监听(docker events)、Prometheus指标监控及日常巡检实现闭环告警;健康状态可inspect获取,事件流支持实时响应,Prometheus适配多维告警规则。

用好内置健康检查(HEALTHCHECK)
这是最基础也最关键的一步。健康状态由守护进程实时维护,可通过 docker inspect 或 docker ps 直接读取。
- 在 Dockerfile 中定义:
HEALTHCHECK --interval=30s --timeout=5s --retries=3 CMD curl -f http://localhost:8080/health || exit 1 - 运行时也可通过
docker run --health-cmd=...补充配置 - 容器启动后,状态会经历 starting → healthy/unhealthy,
docker inspect myapp | jq '.State.Health.Status'可精确获取当前值
监听守护进程事件,捕获异常瞬间
Docker daemon 提供了原生事件流,无需额外代理,适合做低延迟响应。
- 执行命令实时监听:
docker events --filter 'event=health_status:unhealthy' --filter 'event=die' - 搭配简单 shell 脚本,即可触发动作:比如写入日志、调用 webhook 发企业微信/钉钉、或执行
docker restart - 建议用
systemd或supervisord后台托管该监听进程,确保长期运行
对接 Prometheus 实现指标化告警
如果需要趋势分析、多维聚合或分级告警(如“连续 5 分钟 unhealthy”),Prometheus 是生产首选。
- 部署
cadvisor(采集容器级指标) +Prometheus(拉取数据) +Alertmanager(去重、静默、通知) - 关键指标示例:
container_health_status{container="myapp"} == 0(0 表示 unhealthy) - 告警规则可设为:
for: 2m,避免瞬时抖动误报;annotations中带上容器名、主机 IP 等上下文
日常巡检与快速验证技巧
不用等告警,主动掌握状态能提前干预。
-
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Status}}" | grep unhealthy—— 一行扫出所有异常容器 -
docker stats --no-stream --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemPerc}}"—— 结合资源使用看是否因过载导致健康接口超时 - 对健康接口手动测试:
curl -v http://$(hostname -i):8080/health,确认是应用层问题还是网络/防火墙问题
















