(二十九)让健康检查回答明确的问题
/health/live 表示进程能响应请求;/health/ready 表示这个服务当前具备所需状态。书目就绪检查重新打开数据库,核对版本并执行查询,异常时返回 503。模型在启动前已经完整装载,成功启动后就绪响应返回实际版本。
# 项目文件:catalog_project/tools/healthcheck.py
import os
from urllib.request import urlopen
# 直接请求容器内的服务,不依赖 curl 或额外的 Python 包。
with urlopen(os.environ["HEALTH_URL"], timeout=3) as response:
if response.status != 200:
raise SystemExit(1)urllib.request.urlopen 来自标准库,按 HEALTH_URL 请求服务;非 200 或请求异常让进程失败退出,容器据此记录检查结果。源码中的两个项目都带同一工具。
# 本机先观察两个检查的实际响应。
curl -i http://127.0.0.1:8781/health/live
curl -i http://127.0.0.1:8781/health/ready
容器变为 unhealthy 后还需要查看日志并处理原因;健康状态与进程自动重启是两个不同动作。后面的 restart: unless-stopped 在进程退出时按策略重启,单独的健康失败不会自动修复数据库或模型文件。