正在运行不代表服务正常
容器进程没有退出,只能说明进程仍存在;网站可能已经无法响应,后台任务也可能卡住。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 查看健康状态及最近探测输出。排查过程中同时看应用日志、资源占用和宿主机网络,避免把所有异常都归结为容器本身。
以上内容用于经验交流。实际操作前,请核对设备型号、软件版本与官方说明,并备份重要配置。