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)'
我在 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)'