当 HEALTHCHECK 失败时 Docker 容器会发生什么

sam*_*ers 10 docker dockerfile kubernetes-health-check health-check

docker文档说明了什么HEALTHCHECK是指令以及如何检查容器的运行状况。但我无法弄清楚健康检查失败时会发生什么。就像按照用户指令重新启动或停止容器或这两者中的任何一个一样。

另外引用的例子是:
HEALTHCHECK --interval=5m --timeout=3s CMD curl -f http://localhost/ || exit 1

exit 1关于什么的?

OhH*_*ark 9

运行时HEALTHCKECKS可以指定:

\n
    \n
  • --interval=DURATION(默认30秒)

    \n
  • \n
  • --timeout=DURATION(默认30秒)

    \n
  • \n
  • --retries=N(默认 3)

    \n
  • \n
\n

并且容器可以有三种状态:

\n
    \n
  • starting\xe2\x80\x93 容器仍在启动时的初始状态。

    \n
  • \n
  • healthy\xe2\x80\x93 当命令成功时。

    \n
  • \n
  • unhealthy\xe2\x80\x93 当单次运行时间HEALTHCHECK超过指定的超时时间时。发生这种情况时,它将重试,如果仍然失败,将被声明为“不健康”。

    \n
  • \n
\n

当检查连续失败指定次数时,失败的容器将:

\n
    \n
  • 如果处于独立模式,则保持“不健康”状态

    \n
  • \n
  • 如果处于Swarm 模式,请重新启动

    \n
  • \n
\n

否则,它将退出并显示错误代码 0,这意味着它被认为是“健康”的。

\n

我希望它能让事情变得更加清楚。

\n


Eit*_*ank 2

我看过一个很好的视频,那个人解释得很好

https://youtu.be/dLBGoaMz7dQ

基本上,假设您在生产环境中运行一个 Web 服务器,并且它有 3 个副本。在部署过程中,您希望确保不会丢失任何请求。这HEALTHCHECK基本上有助于识别服务器何时实际运行。您的服务器需要一两秒钟才能开始侦听,在这段时间内您可能会丢失请求。

通过使用HEALTHCHECKS您可以确保服务器正在运行,这就是为什么有时人们使用CURL(不是最佳实践)