docker中的 health check
有个业务的服务总是隔一段时间就挂掉,然而重启一下又好了,但是每次重启都很麻烦,于是就想着怎么能在服务停止的时候自动重启。
由于这个业务是跑在docker容器中的,一开始就想着用一下health check这个特性对服务进行监控:
1
HEALTHCHECK --interval=30s --timeout=5s --retries=3 CMD curl -f http://localhost:48080 || exit 1
可是过一段时间发现这个脚本根本就没有生效,但是容器状态确实已经检测到了变成了unhealthy,但是没有重启:
后来查了一下资料发现是因为虽然检测变成了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
进行授权