Posso estar um pouco confuso, mas o que eu quero fazer é ter um healthceck que rode fora do contêiner, por exemplo, no host. Não tenho certeza do porquê o docker em si não consegue fazer o curling no contêiner, para decidir se ele está saudável.
healthcheck:
test: ["CMD-SHELL", "curl -s http://localhost:9200/_cluster/health | grep '\"status\":\"green\"'"]
interval: 10s
retries: 10
start_period: 30s
timeout: 5s
Mas a caixa não tem curl nela, e eu li que adicionar curl nunca é uma boa ideia; então, como posso executar essa verificação sem curl na caixa? Posso de alguma forma fazê-la ser executada a partir do aplicativo docker ou de outro contêiner que pode definir a integridade dessa caixa no docker?
A resposta simples é que você não pode ter um teste definido no seu arquivo compose que seja executado fora do contêiner, então o que você está pedindo não é possível.
Em vez disso, considere quais comandos você tem disponíveis dentro do contêiner quando ele estiver em execução.
Se
curl
não estiver disponível, talvezwget
esteja ou, como usei recentemente,pidof
.pidof
pode ser usado para identificar o PID (ID do processo) de um processo em execução. Se o processo não estiver em execução, o serviço não está íntegro. Não sei qual daemon http você está usando, mas o exemplo abaixo procura o ID do processo do nginx e informa o que é.pidof
retornará um status de saída0
quando encontrar o PID ou PIDs do processo que você está procurando e um status de saída1
quando não encontrar nenhum PID.Um aviso, porém, se você estiver tentando obter o status de uma página da web ou aplicativo que pode ser gerado dinamicamente (PHP, Node, Python, .NET etc.) e apenas o código estiver falhando, mas o nginx ainda estiver em execução, usar o pidof para verificar se o nginx está funcionando obviamente não lhe dirá que seu código/site está falhando.
pidof
tem outras opções também que podem ajudar se usá-lo como está não for adequado às suas circunstâncias. Não vou regurgitar a página do manual para ele, então aqui está um link: https://man7.org/linux/man-pages/man1/pidof.1.htmlSe você só precisa saber se o serviço está em execução e não depende especificamente do status de integridade do Docker, você pode usar algo como o Uptime Kuma para verificar esse ponto de extremidade HTTP para você, mas claramente isso exige que você exponha uma porta HTTP no seu host para que o Uptime Kuma alcance para verificação - e então você pode querer uma verificação de integridade do Docker no Uptime Kuma... e então... o modo Inception começa.