CodeGym /Cursos /Docker SELF /Resolução de problemas de rede

Resolução de problemas de rede

Docker SELF
Nível 18 , Lição 2
Disponível

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:

  1. Verifique o estado dos containers e redes
  2. Use ferramentas de rede dentro dos containers
  3. Verifique a configuração do Docker e os arquivos de rede
  4. Cheque os registros de sistema do Docker
  5. 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:

Terminal

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:

Terminal

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:

Terminal

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:

Terminal

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:

Terminal

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:

Terminal

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.

Yaml

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:

JSON

{
  "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:

Terminal

journalctl -u docker.service

Visualizar os logs dos containers

Os logs dos containers também podem ajudar na identificação de problemas de rede:

Terminal

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.

Terminal

docker network inspect <network_name>

Exemplo de saída do comando docker network inspect

JSON

[
    {
        "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:

Terminal

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:

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    dns:
      - 8.8.8.8

Verificando o DNS dentro do container:

Terminal

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:

Terminal

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:

Terminal

docker network inspect <network_name>

Alterando a sub-rede:

Terminal

docker network create --subnet=192.168.2.0/24 my_network
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION