CodeGym /Cursos /Docker SELF /Depuração de aplicações no Docker Compose

Depuração de aplicações no Docker Compose

Docker SELF
Nível 16 , Lição 3
Disponível

9.1 Ferramentas e comandos para depuração

Docker Compose facilita bastante o desenvolvimento e a implementação de aplicativos multicontêiner, mas, como qualquer tecnologia, podem surgir problemas que exigem depuração e solução. Nesta aula, vamos explorar as principais abordagens e ferramentas para encontrar erros e depurar aplicativos no Docker Compose.

Principais problemas e abordagens para solucioná-los:

  1. Problemas ao iniciar os contêineres:
    • Verificação dos logs dos contêineres.
    • Verificação do status dos contêineres.
    • Verificação dos arquivos de configuração.
  2. Problemas de rede:
    • Verificação das conexões de rede.
    • Uso de utilitários de rede dentro dos contêineres.
  3. Problemas com volumes:
    • Verificação da montagem dos volumes.
    • Verificação das permissões de acesso aos volumes.

Ferramentas e comandos para depuração:

1. Visualização dos logs dos contêineres

Os logs dos contêineres são o primeiro lugar para verificar quando surgir um problema. O comando docker compose logs permite visualizar os logs de todos os serviços definidos no compose.yaml.

Terminal

docker compose logs

Você pode especificar um serviço específico para visualizar seus logs:

Terminal

docker compose logs <service_name>

2. Verificação do status dos contêineres

O comando docker compose ps exibe informações sobre o status de todos os contêineres gerenciados pelo Docker Compose.

Terminal

docker compose ps

A saída desse comando mostra o estado, as portas e os IDs dos contêineres.

3. Reinicialização dos contêineres

Se um contêiner não estiver funcionando corretamente, tente reiniciá-lo:

Terminal

docker compose restart <service_name>

4. Conexão a um contêiner em execução

Para investigar o problema com mais detalhes, você pode se conectar a um contêiner em execução usando o comando docker compose exec.

Terminal

docker compose exec <service_name> /bin/bash

Esse comando abre um terminal dentro do contêiner, permitindo executar comandos de diagnóstico.

5. Uso de utilitários de rede

Verificar conexões de rede dentro dos contêineres pode ajudar a diagnosticar problemas de rede. Você pode usar ferramentas como ping, curl, netcat e outras.

Terminal

docker compose exec <service_name> ping <hostname>

docker compose exec <service_name> curl http://<hostname>

docker compose exec <service_name> netcat -z -v <hostname> <port>

9.2 Abordagens Avançadas

Abordagens adicionais para encontrar erros

1. Verificar o arquivo Docker Compose

Erros no arquivo compose.yaml podem levar a um funcionamento incorreto dos containers. Verifique a sintaxe do arquivo com o comando:

Terminal

docker compose config

Esse comando verifica o arquivo em busca de erros e mostra a configuração final.

2. Usar Healthcheck

Você pode definir healthcheck para serviços no compose.yaml, para que o Docker verifique automaticamente o estado dos containers.

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    healthcheck:
      test: ["CMD-SHELL", "curl -f http://localhost || exit 1"]
      interval: 30s
      timeout: 10s
      retries: 3

3. Verificar montagem de volumes

Problemas com volumes podem acontecer devido a montagens incorretas ou permissões insuficientes. Certifique-se de que os volumes estão montados corretamente e que os containers têm acesso a eles.

Yaml

version: '3.8'

services:
  db:
    image: postgres:latest
    volumes:
      - db-data:/var/lib/postgresql/data

volumes:
  db-data:

3.1 Verificar a disponibilidade do volume

Para verificar se o volume está acessível a partir do container, você pode iniciar um container e executar um comando que verifica a existência do volume (por exemplo, listar arquivos no volume). Suponha que o volume está montado no caminho /mnt/volume dentro do container:

Terminal

docker run --rm -v my_volume:/mnt/volume alpine ls /mnt/volume

Se o volume estiver acessível, o comando ls mostrará a lista de arquivos e diretórios dentro dele. Se o volume estiver inacessível ou vazio, você receberá uma mensagem correspondente.

3.2 Verificar o espaço disponível no volume

Para verificar quanto espaço está disponível no volume a partir de dentro do container, use o comando df:

Terminal

docker run --rm -v my_volume:/mnt/volume alpine df -h /mnt/volume

Ele mostra o espaço disponível no sistema de arquivos onde o volume está montado. A opção -h exibe a informação em um formato legível (com unidades como MB, GB etc.).

4. Usar IDE

Para facilitar o debug, use uma IDE com funções de debug e logging habilitadas. Você pode criar arquivos de configuração separados para desenvolvimento e produção, usando o parâmetro --file.

Terminal

docker compose --file docker-compose.dev.yml up

Importante! Aqui tem uma instrução útil para configurar o debug remoto de uma aplicação rodando no Docker, usando o IntelliJ IDEA: Configuração de Debug Remoto .

5. Verificar variáveis de ambiente

Variáveis de ambiente incorretas ou ausentes podem causar problemas. Certifique-se de que todas as variáveis necessárias estão definidas no arquivo .env ou diretamente no compose.yaml.

Yaml

version: '3.8'

services:
  app:
    image: myapp:latest
    environment:
      - APP_ENV=development
      - DEBUG=true

9.3 Exemplos de comandos para depuração

Exemplos de uso de comandos para depuração

Exemplo 1: Verificação e correção de erro de conexão com o banco de dados

Visualização de logs do serviço web:

Terminal

docker compose logs web

Verificação da conexão de rede entre web e db:

Terminal

docker compose exec web ping db
docker compose exec web curl http://db:5432

Conexão ao container web para diagnóstico:

Terminal

docker compose exec web /bin/bash

Exemplo 2: Verificação de problemas com volumes

Verificação da montagem dos volumes:

Yaml

version: '3.8'

services:
  db:
    image: postgres:latest
    volumes:
      - db-data:/var/lib/postgresql/data
    
volumes:
  db-data:

Conexão ao container db e verificação de dados:

Terminal

docker compose exec db /bin/bash
ls -l /var/lib/postgresql/data
1
Опрос
Escalonamento de serviços,  16 уровень,  3 лекция
недоступен
Escalonamento de serviços
Escalonamento de serviços
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION