8.1 Passos principais para diagnosticar problemas de rede
Problemas de rede no Docker podem acontecer por vários motivos, incluindo configuração incorreta de redes, problemas com DNS, conflitos de endereços IP e outros. Nesta aula, vamos dar uma olhada nos principais métodos para diagnosticar e resolver problemas de rede no Docker.
Se você tiver problemas de rede, siga os passos abaixo:
- Verifique o estado dos containers e redes
- Use ferramentas de rede dentro dos containers
- Verifique a configuração do Docker e os arquivos de rede
- Cheque os registros de sistema do Docker
- Use comandos de rede do Docker
8.2 Verificação do estado de containers e redes
O primeiro passo para diagnosticar problemas de rede é verificar o estado dos containers e redes.
Verificação do estado dos containers
Primeiro, vamos listar todos os containers em execução. Para isso, usamos o comando docker ps
:
docker ps
Se os containers não estiverem sendo executados, isso pode indicar problemas com o próprio Docker ou com a configuração dos containers.
Verificação das redes
O comando docker network ls
lista todas as redes criadas no Docker:
docker network ls
Certifique-se de que a rede necessária existe e que os containers estão conectados a ela.
8.3 Usando utilitários de rede dentro de containers
Utilitários de rede como ping
, curl
, netcat
(ou nc
), e nslookup
, podem ajudar a diagnosticar problemas dentro de containers. Cada um desses utilitários realiza uma tarefa específica:
ping
— utilitário para verificar a disponibilidade de hosts remotos na rede enviando solicitações ICMP.curl
— ferramenta para transferir dados por vários protocolos, frequentemente usada para verificar a disponibilidade de serviços web.netcat (nc)
— ferramenta universal para trabalhar com conexões de rede, permite criar conexões TCP/UDP e diagnosticar a disponibilidade de portas.nslookup
— utilitário para pesquisar informações sobre registros DNS, por exemplo, para verificar a resolução de nomes de containers.
Exemplo de uso do ping
Conecte-se ao container e verifique a comunicação com outro container ou serviço usando o utilitário ping
para enviar solicitações ICMP:
docker exec -it <container_name> ping <target_container_name_or_ip>
Exemplo de uso do curl
Verifique a disponibilidade de um serviço web dentro do container usando o utilitário curl
:
docker exec -it <container_name> curl http://<target_service>
Exemplo de uso do nslookup
Use o nslookup
para verificar a resolução de nomes DNS de containers, o que é útil para diagnosticar problemas com serviços de rede:
docker exec -it <container_name> nslookup <target_container_name>
Exemplo de uso do nc host port
O utilitário nc
é usado para depuração e diagnóstico de conexões de rede. Com o comando nc host port
, você pode estabelecer uma conexão com o host e porta especificados, verificando a disponibilidade da porta no host de destino:
docker exec -it <container_name> nc -zv 192.168.1.1 22
8.4 Verificando a configuração do Docker e arquivos de rede
Configurações incorretas do Docker e de arquivos de rede podem causar problemas de conexão.
Verificação do arquivo docker-compose.yml
Certifique-se de que o arquivo docker-compose.yml
esteja configurado corretamente, e todas as redes, serviços e portas estão indicados corretamente.
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "80:80"
networks:
- webnet
db:
image: postgres:latest
ports:
- "5432:5432"
networks:
- webnet
networks:
webnet:
driver: bridge
Verificação do arquivo /etc/docker/daemon.json
Confira a configuração do Docker Daemon
, se ela foi alterada:
{
"dns": ["8.8.8.8", "8.8.4.4"],
"fixed-cidr": "192.168.1.0/24"
}
8.5 Verificação de logs do sistema Docker
Os logs do sistema Docker podem conter informações úteis sobre erros e problemas de rede.
Visualizar os logs do Docker
Use o comando journalctl
pra visualizar os logs do Docker em sistemas com systemd
:
journalctl -u docker.service
Visualizar os logs dos containers
Os logs dos containers também podem ajudar na identificação de problemas de rede:
docker logs <container_name>
8.6: Usando comandos de rede do Docker
O Docker oferece comandos para diagnosticar e gerenciar redes, como docker network inspect
e docker network connect
.
Comando docker network inspect
Este comando permite obter informações detalhadas sobre a rede, incluindo containers conectados e configurações de IPAM.
docker network inspect <network_name>
Exemplo de saída do comando docker network inspect
[
{
"Name": "webnet",
"Id": "e5e5e1b1a3e5",
"Created": "2021-01-01T00:00:00.000000000Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.18.0.0/16",
"Gateway": "172.18.0.1"
}
]
},
"Containers": {
"container_id": {
"Name": "web",
"EndpointID": "6c52f8c75c1e",
"MacAddress": "02:42:ac:11:00:02",
"IPv4Address": "172.18.0.2/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
]
Comando docker network connect
Se um container foi conectado de forma errada a uma rede, você pode conectá-lo manualmente:
docker network connect <network_name> <container_name>
8.7 Exemplos de Diagnóstico e Solução de Problemas
Exemplo 1: Problemas com a conversão de nome de domínio para IP pelo DNS
Se os containers não conseguem converter os nomes de hosts de outros containers, verifica as configurações do DNS
:
Verificando configurações de DNS
no docker-compose.yml:
version: '3.8'
services:
web:
image: nginx:latest
dns:
- 8.8.8.8
Verificando o DNS
dentro do container:
docker exec -it <container_name> cat /etc/resolv.conf
Exemplo 2: Problemas de acesso aos serviços
Se os containers não conseguem acessar serviços em outros hosts:
Verificando as portas publicadas:
docker ps
Verificando as regras do firewall:
Certifica-te de que as regras do firewall não estão bloqueando as portas necessárias.
Exemplo 3: Conflito de endereços IP
Se houver um conflito de endereços IP entre containers ou com o host:
Verificando a sub-rede da rede:
docker network inspect <network_name>
Alterando a sub-rede:
docker network create --subnet=192.168.2.0/24 my_network
GO TO FULL VERSION