在 swarm 模式下运行 Docker 时,HEALTHCHECK 的真正用途是什么?

sbr*_*tla 7 healthcheck docker-swarm

我很难弄清楚HEALTHCHECK在 swarm 模式下运行 Docker 时的真正用途。

一个地方建议Docker 将重新启动一项被认为是不健康的任务。另一个地方解释说 Docker 将停止向不健康的任务发送流量Docker 文档本身只解释了HEALTHCHECK指令是什么,以及如何配置它。它没有试图解释当任务不健康时会发生什么。

换句话说,我正在努力寻找一个清晰可靠的解释来解释什么是HEALTCHECK真正的。

此外,查看Docker REST API,这个特定的数据(任务是否健康)甚至没有为任务公开(尽管它为容器公开)。这使得使用该指标来监控 Docker Swarm 变得很困难,所以在我看来,这也不是该指标的主要目的。

当在 swarm 模式下运行 Docker 时任务变得不健康时,真正会发生什么?

Bre*_*her 10

您按照第一个链接建议的方式设置健康检查。所有这些方法都会告诉 docker 运行什么命令,运行它的频率等。

如果你docker run用来启动一个容器,当健康检查失败时,UI 会显示不健康,但 docker 不会对容器做任何事情。由您或一些更高级别的监控解决方案来采取行动。

如果您使用docker service create(或docker stack deploy) 创建 Swarm 服务并且该健康检查失败,它将停止/终止任务(容器)并重新安排新任务以替换该服务的副本。在停止/终止期间(它试图优雅地停止它,但像所有 docker 容器一样在 10 秒后终止),Swarm 将停止覆盖该任务的入站流量,就像它对所有停止任务所做的那样。

  • @SimakisPanagiotis docker-compose 除了报告其状态之外,不会对健康检查执行任何操作。在 Swarm 中,当任务(容器)处于健康状态以外的任何状态时,它不应该向该任务(容器)发送连接 (2认同)