docker

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 云和虚拟化 > docker > Docker 容器健康检查

Docker 容器健康检查的指令方式详解

作者:K8sCat

这篇文章主要介绍了Docker 容器健康检查的指令方式详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

正文

Docker 容器健康检查指的是在 Dockerfile 中使用 HEALTHCHECK 指令对容器的运行状态进行检查,
并在 docker ps 的 STATUS 栏显示 healthy/unhealthy。

HEALTHCHECK 指令有两种格式

HEALTHCHECK 指令告诉 Docker 如何测试一个容器,以检查它是否仍在工作。
这可以检测到一些情况,例如 web 服务器陷入无限循环,无法处理新的连接,即使服务器进程仍在运行。

当容器指定了健康检查时,除了正常状态外,它还具有健康状态。此状态初始为 starting
只要健康检查通过,它就会恢复到 healthy(无论它以前处于什么状态)。在连续失败一定次数后,它就会变得 unhealthy

CMD 之前可以出现的选项有

运行状态检查

首先会在容器启动后的 interval 秒内运行,然后在前一次检查完成后的 interval 秒内再次运行。

如果一次状态检查花费的时间超过 timeout 秒,则认为这次检查失败。

容器的运行状态检查连续失败 retries 次才会被视为不健康。

start period 为需要时间启动的容器提供初始化时间。在此期间的探测失败将不计入最大重试次数。
但是,如果在启动期间健康检查成功,则认为容器已启动,所有连续失败的情况都将计算到最大重试次数。

Dockerfile 中只能有一个 HEALTHCHECK 指令。如果列出多个,则只有最后一个 HEALTHCHECK 才会生效。

CMD 关键字后面的命令可以是 shell 命令(例如 HEALTHCHECK CMD /bin/check-running)或 exec 数组(与其他 Dockerfile 命令一样,有关详细信息,请参见 ENTRYPOINT)。

command 的退出状态表示容器的健康状态。可能的值是:

例如,每五分钟左右检查一次 web 服务器是否能在三秒内为站点的主页提供服务:

HEALTHCHECK --interval=5m --timeout=3s \
  CMD curl -f http://localhost/ || exit 1

为了帮助调试失败的探测,command 写在 stdout 或 stderr 上的任何输出文本(UTF-8编码)都将存储在健康状态中,并且可以通过 docker inspect 进行查询。
这样的输出应该保持简短(目前只存储前4096个字节)。

当容器的健康状态发生变化时,将生成一个具有新状态的 health_status 事件。

以上就是Docker 容器健康检查的指令方式详解的详细内容,更多关于Docker 容器健康检查的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文