文章

docker中的 health check

有个业务的服务总是隔一段时间就挂掉,然而重启一下又好了,但是每次重启都很麻烦,于是就想着怎么能在服务停止的时候自动重启。

由于这个业务是跑在docker容器中的,一开始就想着用一下health check这个特性对服务进行监控:

1
HEALTHCHECK --interval=30s --timeout=5s --retries=3 CMD curl -f http://localhost:48080 || exit 1

可是过一段时间发现这个脚本根本就没有生效,但是容器状态确实已经检测到了变成了unhealthy,但是没有重启:

image-20250925225726543

后来查了一下资料发现是因为虽然检测变成了unhealthy,但也仅仅只是标记为unhealthy,不会自动重启容器。

于是将命令改为了:

1
2
# 健康检查失败时直接杀死PID=1的主进程,触发容器退出和重启
curl -f http://localhost:48080 || (echo "Health check failed, killing main process" && kill 1 && exit 1)

这样就可以将容器中的程序退出,然后触发自动重启了。

本文由作者按照 CC BY 4.0 进行授权