Para que o HEALTHCHECK é realmente usado ao executar o Docker no modo swarm?

Estou tendo dificuldade em descobrir o que HEALTHCHECK realmente é usado para ao executar o Docker no modo swarm.

Um lugar sugere que Docker vai reiniciar uma tarefa que é considerada insalubre. Outro lugar explica que o Docker irá pare de enviar tráfego para tarefas que não são saudáveis. A documentação Docker em si só explica o que o HEALTHCHECK diretiva é, e como configurá-lo. Não faz nenhuma tentativa de explicar o que acontece quando uma tarefa não é saudável.

Em outras palavras, estou lutando para encontrar uma explicação clara e confiável do que HEALTCHECK fazer.

Além disso, olhando para o Docker REST API, esse dado específico (é uma tarefa saudável ou não) nem é exposto para tarefas (é exposto para contêineres). Isso torna difícil usar essa métrica para monitorar um enxame de Docker, então também não me parece que esse seja o objetivo principal da métrica.

O que realmente acontece quando uma tarefa se torna insalubre ao executar o Docker no modo swarm?

Você configura as verificações de integridade da mesma maneira que seu primeiro link sugere. Todas essas maneiras dirão ao docker qual comando executar, com que frequência executá-lo, etc.

Se você usar docker run para iniciar um contêiner, a IU mostrará insalubre quando as verificações de saúde falharem, mas o docker não fará nada com o contêiner. Cabe a você ou alguma solução de monitoramento de nível superior agir sobre ela.

Se você usar docker service create (ou docker stack deploy) para criar um serviço de enxame e que o healthcheck falhe, ele interromperá / eliminará a tarefa (contêiner) e reagendará uma nova tarefa para substituir essa réplica do serviço. Durante o stop / kill (ele tenta pará-lo graciosamente, mas mata após 10 anos como todos os contêineres do docker), o Swarm irá parar de sobrepor o tráfego de entrada para essa tarefa como faz para todas as tarefas de parada.