我很难弄清楚HEALTHCHECK
在 swarm 模式下运行 Docker 时真正使用的是什么。
有一个地方建议Docker 将重新启动一项被认为不健康的任务。另一个地方解释说 Docker 将停止向不健康的任务发送流量。Docker 文档本身只解释了HEALTHCHECK
指令是什么,以及如何配置它。它没有试图解释当任务不健康时会发生什么。
换句话说,我正在努力寻找一个清晰可靠的解释来解释HEALTCHECK
真正的作用。
此外,查看Docker REST API,这个特定的数据(任务是否健康)甚至没有暴露给任务(尽管它暴露给容器)。这使得使用该指标来监控 Docker Swarm 变得很困难,因此在我看来,这也不是该指标的主要目的。
当在 swarm 模式下运行 Docker 时任务变得不健康时会发生什么?
您设置健康检查的方式与您的第一个链接建议的方式相同。所有这些方式都会告诉 docker 运行什么命令,运行它的频率等。
如果你使用
docker run
启动容器,当健康检查失败时 UI 会显示不健康,但 docker 不会对容器做任何事情。这取决于您或某些更高级别的监控解决方案来对其采取行动。如果您使用
docker service create
(或docker stack deploy
)创建 Swarm 服务并且健康检查失败,它将停止/终止任务(容器)并重新安排新任务以替换该服务的副本。在停止/终止期间(它尝试优雅地停止它,但像所有 docker 容器一样在 10 秒后终止),Swarm 将停止覆盖该任务的入站流量,就像它对所有停止任务所做的那样。