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:
- 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.
- Problemas de rede:
- Verificação das conexões de rede.
- Uso de utilitários de rede dentro dos contêineres.
- 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
.
docker compose logs
Você pode especificar um serviço específico para visualizar seus logs:
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.
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:
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
.
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.
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:
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.
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.
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:
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
:
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
.
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
.
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
:
docker compose logs web
Verificação da conexão de rede entre web
e db
:
docker compose exec web ping db
docker compose exec web curl http://db:5432
Conexão ao container web
para diagnóstico:
docker compose exec web /bin/bash
Exemplo 2: Verificação de problemas com volumes
Verificação da montagem dos volumes:
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:
docker compose exec db /bin/bash
ls -l /var/lib/postgresql/data
GO TO FULL VERSION