Introdução

O recurso de healthcheck no Docker permite monitorar o status de um container para verificar se ele está funcionando corretamente. Ele define uma maneira de o Docker saber se o serviço dentro do container está ativo ou se precisa ser reiniciado. A configuração do healthcheck é adicionada no Dockerfile ou no docker-compose.yml.

No Dockerfile

Você pode configurar um HEALTHCHECK no seu Dockerfile usando a seguinte sintaxe:

HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
    CMD curl --fail http://localhost:80 || exit 1

Aqui estão as opções mais comuns:

  • --interval: Define o tempo entre cada verificação de saúde (ex.: 30s).

  • --timeout: Define quanto tempo esperar por uma resposta antes de considerar que a verificação falhou.

  • --start-period: Tempo de espera antes da primeira verificação, para dar tempo ao serviço de iniciar.

  • --retries: Número de tentativas antes de considerar que o container está em mau estado.

  • CMD: O comando executado para verificar a saúde do container. No exemplo acima, o curl faz uma requisição HTTP para um serviço na porta 80, e a falha no comando indica que o serviço está inoperante.

No docker-compose.yml

Você também pode definir o healthcheck dentro do arquivo docker-compose.yml para containers específicos:

version: "3.8"
services:
  web:
    image: myapp
    ports:
      - "80:80"
    healthcheck:
      test: ["CMD", "curl", "--fail", "http://localhost:80"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 5s

No docker-compose.yml, as opções são semelhantes às usadas no Dockerfile:

  • test: O comando de teste que será executado.

  • interval: Define o tempo entre cada verificação.

  • timeout: Limite de tempo para a execução do teste.

  • retries: Quantas falhas são permitidas antes de o container ser considerado unhealthy.

  • start_period: Espera antes da primeira verificação.

Como monitorar

Depois que o healthcheck está configurado, você pode usar o comando docker inspect para verificar o status de saúde do container:

O status pode ser:

  • healthy: O container passou na verificação.

  • unhealthy: O container falhou no healthcheck.

  • starting: O container ainda está na fase de inicialização.

Essa configuração é essencial para garantir a robustez e a estabilidade dos serviços rodando em containers Docker.

Laboratório

Aplicação sendo executada no Docker Compose.

Arquivo compose.yaml:

Simulação de quebra da aplicação, onde ela não é encerrada mas deixa de funcionar como deveria.

Quebrar a aplicação:

Porém o container continua em execução:

A aplicação possui um endpoint para o HealthCheck:

Formas para implementar o HealthCheck:

  • Linha de Comando

  • Docker Compose

  • Dockerfile

Last updated