Solucionando Problemas de Conectividade de Containers
Você pode pular esta etapa se não tiver problemas de conectividade.
Agora que entendemos como testar a conectividade entre containers, vamos explorar como solucionar problemas comuns de conectividade.
Problemas Comuns de Conectividade
Ao lidar com redes de containers Docker, você pode encontrar vários problemas comuns:
- Containers em redes diferentes sem o roteamento adequado
- Configurações de firewall ou grupo de segurança bloqueando o tráfego
- Aplicação não escutando no IP/porta esperados
- Erros de configuração de rede
- Problemas de resolução DNS
Vamos percorrer as etapas de solução de problemas para cada um desses possíveis problemas.
Verificando a Configuração da Rede
Primeiro, vamos examinar a configuração de rede de nossos containers:
## Visualize as interfaces de rede do container1
docker exec container1 ip addr show
## Visualize as interfaces de rede do container2
docker exec container2 ip addr show
A saída mostra todas as interfaces de rede em cada container. Cada rede Docker conectada aparece como uma interface eth com seu endereço IP atribuído.
Verificando as Rotas de Rede
Vamos verificar a configuração de roteamento em nossos containers:
docker exec container1 route -n
Isso mostra a tabela de roteamento para o container1, indicando para onde o tráfego de rede é direcionado.
Verificando as Portas de Escuta
Para determinar se uma aplicação está escutando corretamente as conexões, use:
docker exec container2 netstat -tuln
Isso mostra todas as portas TCP e UDP em escuta. Nosso servidor HTTP deve estar escutando na porta 8080.
Diagnosticando com tcpdump
Para uma análise de tráfego de rede mais detalhada, podemos usar tcpdump para capturar e analisar pacotes:
## Instale o tcpdump no container1
docker exec container1 apt-get install -y tcpdump dnsutils
## Capture pacotes por 10 segundos
docker exec container1 timeout 10 tcpdump -i eth0 -n
Enquanto isso estiver em execução, abra outro terminal e gere algum tráfego:
docker exec container1 ping -c 3 container2
Você deve ver os pacotes ICMP sendo capturados na saída do tcpdump.
Verificando a Resolução DNS do Docker
Se você estiver com problemas de resolução DNS entre containers:
## Verifique a configuração DNS
docker exec container1 cat /etc/resolv.conf
## Teste a resolução DNS
docker exec container1 nslookup container2
Simulando um Problema de Rede
Vamos simular um problema de conectividade desconectando temporariamente o container1 de nossa rede personalizada:
## Desconecte o container1 de my-network
docker network disconnect my-network container1
## Tente fazer ping por nome (isso deve falhar)
docker exec container1 ping -c 2 container2
Você deve ver que o ping falha porque o container1 não consegue mais resolver o container2 por nome após ser desconectado da rede compartilhada.
Vamos reconectá-lo:
## Reconecte o container1 a my-network
docker network connect my-network container1
## Verifique se a conectividade foi restaurada
docker exec container1 ping -c 2 container2
Agora o ping deve funcionar novamente, demonstrando como os containers devem estar na mesma rede para que a resolução de nomes funcione.
Lista de Verificação de Solução de Problemas
Ao enfrentar problemas de conectividade de containers, siga esta lista de verificação:
- Verifique se os containers estão em execução:
docker ps
- Verifique se eles estão na mesma rede:
docker network inspect <network>
- Verifique se os endereços IP estão atribuídos:
docker inspect <container>
- Teste a conectividade básica (ping):
docker exec <container> ping <target>
- Verifique se a aplicação está escutando:
docker exec <container> netstat -tuln
- Verifique se a resolução DNS está funcionando:
docker exec <container> nslookup <target>
- Procure problemas de firewall:
docker exec <container> iptables -L
- Verifique os logs do container:
docker logs <container>
Usar essa abordagem sistemática ajudará você a identificar e resolver a maioria dos problemas de conectividade de containers.