CRON 作业 ping 运行 容器端口并在出现错误时重启服务器

CRON Job to ping running container port and restart server in case of error

我在 docker 容器内有一个 python 脚本 运行,在容器内有一个 REST API(localhost 从 8085 访问端口)

一切正常 (http://{host_ip_address:8085}),但有时容器会停止响应 http 请求,重新启动容器即可解决问题。

我想在主机 运行 容器内设置一个 CRON 作业,以检查 http://localhost:8085 是否正在响应,如果没有,请重新启动容器。

我重启机器上所有运行个容器就ok了,所以失败命令可以是:

docker restart $(docker ps -a -q)

我怎样才能做到这一点?

回答我自己的问题:

docker 有 HEALTHCHECK 指令通过我们想要的任何命令轮询容器。不幸的是,在撰写本文时,如果容器不健康,它不会自动重启。

这是我在 Dockerfile 中的 HEALTHCHECK 指令(应用程序公开端口 8085):

HEALTHCHECK --interval=1m --timeout=30s --start-period=45s \
    CMD curl -f --retry 6 --max-time 5 --retry-delay 10 --retry-max-time 60 "http://localhost:8085" || bash -c 'kill -s 15 -1 && (sleep 10; kill -s 9 -1)'