Estou tendo dificuldade em descobrir o que HEALTHCHECK
realmente é usado ao executar o Docker no modo swarm.
Um local sugere que o Docker reiniciará uma tarefa considerada não íntegra. Outro lugar explica que o Docker deixará de enviar tráfego para tarefas que não estejam íntegras. A própria documentação do Docker explica apenas o HEALTHCHECK
que é a diretiva e como configurá-la. Ele não tenta 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
realmente faz.
Além disso, olhando para a API REST do Docker , esse dado específico (é uma tarefa íntegra ou não) nem é exposto para tarefas (embora seja exposto para contêineres). Isso dificulta o uso dessa métrica para monitorar um Docker Swarm, portanto, também não me parece que esse seja o objetivo principal da métrica.
O que realmente acontece quando uma tarefa se torna não íntegra 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 interface do usuário mostrará a integridade quando as verificações de integridade falharem, mas o docker não fará nada no contêiner. Cabe a você ou alguma solução de monitoramento de nível superior agir sobre isso.Se você usar
docker service create
(oudocker stack deploy
) para criar um serviço Swarm e essa verificação de integridade falhar, ele interromperá/eliminará a tarefa (contêiner) e reprogramará uma nova tarefa para substituir essa réplica do serviço. Durante a parada/eliminação (ele tenta pará-la graciosamente, mas mata após 10s como todos os contêineres do docker), o Swarm interromperá o tráfego de entrada de sobreposição para essa tarefa, como faz para todas as tarefas de parada.