Docker 实践 · 约 4 分钟阅读

健康检查与重启策略,不是一回事

理解 running、healthy 和真正可用之间的区别。

Docker 实践主题插画

正在运行不代表服务正常

容器进程没有退出,只能说明进程仍存在;网站可能已经无法响应,后台任务也可能卡住。healthcheck 允许服务在容器内部执行一段探测命令,报告 starting、healthy 或 unhealthy 状态。

services:
  web:
    image: nginx:1.27-alpine
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "wget", "-q", "-O", "/dev/null", "http://127.0.0.1/"]
      interval: 30s
      timeout: 5s
      retries: 3
      start_period: 20s

这个示例依赖镜像内提供 wget。换成其他镜像时,应先确认探测工具存在;也可以使用应用自己提供的健康接口。

重启策略负责什么

restart: unless-stopped 主要用于处理进程退出后重启的情况。Docker 并不会仅因为健康状态变成 unhealthy 就自动按这条策略重启容器。 如果需要故障恢复,必须单独设计监控、告警和恢复动作。

让检查真正有意义

检查数据库是否可连、关键依赖是否就绪时,要兼顾探测速度和误判成本。一个过于复杂的检查可能反过来给服务增加负担;一个仅返回静态 200 的检查又可能漏掉业务故障。

观察建议

用 docker inspect 查看健康状态及最近探测输出。排查过程中同时看应用日志、资源占用和宿主机网络,避免把所有异常都归结为容器本身。

以上内容用于经验交流。实际操作前,请核对设备型号、软件版本与官方说明,并备份重要配置。

← 返回Docker 实践专题