Docker Compose: healthcheck e recuperação de serviços

Ilustração técnica sobre Docker Compose: healthcheck e recuperação de serviços
Ilustração sobre Docker Compose: healthcheck e recuperação de serviços

Resposta Rápida / TL;DR

Teste uma dependência real com timeout e retries razoáveis, use a saída do healthcheck para diagnóstico e não confunda restart automático com correção da causa.
Índice do artigo

    Resposta rápida

    Um processo vivo não significa que a aplicação esteja pronta. healthcheck executa uma verificação repetível dentro do container e marca o serviço como healthy ou unhealthy. Use esse sinal para diagnóstico e orquestração; não trate reinícios como prova de que o problema foi resolvido.

    O que um bom teste deve responder

    Escolha uma verificação pequena e útil: uma rota /health, conexão a uma dependência essencial ou uma consulta simples. Não faça um teste que altere dados, dependa de um serviço externo instável ou consuma a mesma carga que a aplicação deveria atender.

    Exemplo no Compose

    services:
      app:
        image: exemplo/app:stable
        healthcheck:
          test: ["CMD-SHELL", "curl -fsS http://127.0.0.1:8080/health || exit 1"]
          interval: 30s
          timeout: 5s
          retries: 3
          start_period: 20s
        restart: unless-stopped
    

    Se a imagem não tem curl, use wget, um binário próprio ou uma verificação compatível com a distribuição. O start_period dá tempo para a aplicação inicializar sem marcar falha prematuramente.

    Observe o resultado

    docker compose up -d
    docker compose ps
    docker inspect --format '{{json .State.Health}}' nome-do-container
    docker compose logs --tail=100 app
    

    O histórico do healthcheck mostra código de saída e parte da saída do comando. Procure o primeiro erro, não apenas a última reinicialização.

    Falha controlada

    Em ambiente de teste, altere temporariamente a rota ou pare uma dependência e observe a transição para unhealthy. Depois restaure a condição e confirme que o serviço volta a responder. Não faça esse teste em produção sem janela, monitoramento e plano de rollback.

    Armadilhas comuns

    Um healthcheck que chama um endpoint autenticado pode falhar por credencial expirada. Um teste que depende de DNS público pode indicar falha da internet, não da aplicação. restart: unless-stopped ajuda a recuperar processo, mas não corrige migração quebrada, falta de disco ou configuração inválida.

    Combine o healthcheck com logs, uso de CPU/RAM, espaço em disco e alertas externos. Uma VPS para Docker deve ter recursos e observabilidade compatíveis com os serviços que hospeda.

    Checklist

    • [ ] Health endpoint é barato e representativo.
    • [ ] Comando existe na imagem.
    • [ ] Timeout, retries e start period refletem o boot real.
    • [ ] Falhas aparecem nos logs.
    • [ ] Há procedimento de rollback.

    FAQ

    Healthcheck reinicia o container?

    Por si só, ele apenas informa o estado. A política de reinício e a ferramenta de orquestração determinam a recuperação.

    depends_on espera o serviço ficar saudável?

    O comportamento depende da versão e da condição configurada. Valide a resolução usada pelo seu Compose em vez de assumir que a ordem de inicialização garante prontidão.

    Exemplo de decisão

    Se a aplicação leva 90 segundos para migrar o banco, um start_period de 20 segundos gera um alerta falso. Se a rota /health responde mesmo quando a fila está parada, ela é um teste fraco para o objetivo do serviço. Registre por que cada comando foi escolhido e qual falha ele deveria detectar. Esse pequeno documento ajuda a equipe a atualizar o healthcheck quando a aplicação muda, sem transformar um indicador operacional em decoração no Compose.

    Download Gratuito Template Pronto para n8n & Evolution API

    📦 Template n8n: Agente de IA com WhatsApp + Evolution API

    Baixe o arquivo JSON pronto para importar: Webhook configurado, tratamento de remetente, nó de OpenAI e disparo via Evolution API.

    Comentários (9)

    Carolina Rodrigues

    Excelente explicação sobre multi-stage builds. Reduzi o tamanho da imagem da minha aplicação de 1.2GB para apenas 85MB!

    Marcelo Rodrigues

    O Docker Compose com healthchecks configurados salvou meus deploys. O container agora só recebe tráfego quando está 100% pronto.

    Patrícia Rocha

    Tutorial muito limpo e direto. Subi toda a stack com Traefik e Let's Encrypt em menos de meia hora seguindo o guia.

    Camila Lima

    A explicação sobre as permissões de usuário não-root dentro do container fechou uma brecha de segurança crítica no nosso pipeline.

    Juliana Lima - E-commerce Brasil

    Estava tendo problemas com logs enchendo o disco no servidor. A configuração de log rotation com json-file resolveu de vez.

    Camila Lima

    Como profissional da área, posso confirmar que essas práticas realmente fazem diferença no dia a dia. Tem algum repositório GitHub com exemplos práticos?

    Maria Silva

    Artigo muito bem escrito e explicativo! Já compartilhei com toda a equipe da empresa.

    Julia Rodrigues

    Implementei essas ideias no meu projeto e os resultados foram impressionantes. Obrigado pelo conhecimento compartilhado!

    Maria Ferreira - Consultoria TI

    Excelente conteúdo! Aprendi conceitos que não encontrava em outros lugares em português. Você tem algum material mais avançado sobre esse tema?

    ← Voltar para o blog