CodeGym /Corsi /Docker SELF /Risoluzione dei problemi di rete

Risoluzione dei problemi di rete

Docker SELF
Livello 18 , Lezione 2
Disponibile

8.1 Passaggi principali per diagnosticare i problemi di rete

I problemi di rete in Docker possono verificarsi per diverse ragioni, inclusa una configurazione errata delle reti, problemi con il DNS, conflitti di indirizzi IP e altro ancora. In questa lezione esamineremo i metodi principali per diagnosticare e risolvere i problemi di rete in Docker.

Se ci sono problemi di rete, bisogna seguire questi passaggi:

  1. Verifica dello stato dei container e delle reti
  2. Utilizzo degli strumenti di rete all'interno dei container
  3. Controllo della configurazione di Docker e dei file di rete
  4. Verifica dei log di sistema di Docker
  5. Uso dei comandi di rete di Docker

8.2 Verifica dello stato dei container e delle reti

Il primo passo nella diagnosi dei problemi di rete è verificare lo stato dei container e delle reti.

Verifica dello stato dei container

Per prima cosa, visualizziamo tutti i container in esecuzione. Per questo utilizziamo il comando docker ps:

Terminale

docker ps

Se i container non sono in esecuzione, potrebbe indicare problemi con Docker stesso o con la configurazione dei container.

Verifica delle reti

Il comando docker network ls mostra tutte le reti create in Docker:

Terminale

docker network ls

Assicurati che la rete necessaria esista e che i container siano connessi ad essa.

8.3 Utilizzo degli strumenti di rete all'interno dei container

Gli strumenti di rete, come ping, curl, netcat (o nc), e nslookup, possono essere utili per diagnosticare problemi all'interno dei container. Ognuno di questi strumenti svolge un compito specifico:

  • ping — uno strumento per controllare la disponibilità degli host remoti nella rete, inviando richieste ICMP.
  • curl — uno strumento per il trasferimento dei dati utilizzando vari protocolli, spesso utilizzato per verificare la disponibilità dei servizi web.
  • netcat (nc) — uno strumento universale per lavorare con le connessioni di rete, permette di creare connessioni TCP/UDP e diagnosticare la disponibilità delle porte.
  • nslookup — uno strumento per cercare informazioni sui record DNS, ad esempio per verificare la risoluzione dei nomi dei container.

Esempio di utilizzo di ping

Connettiti al container e controlla la connessione con un altro container o servizio, utilizzando lo strumento ping per inviare richieste ICMP:

Terminale

docker exec -it <container_name> ping <target_container_name_or_ip>

Esempio di utilizzo di curl

Verifica la disponibilità di un servizio web all'interno del container utilizzando lo strumento curl:

Terminale

docker exec -it <container_name> curl http://<target_service>

Esempio di utilizzo di nslookup

Utilizza nslookup per controllare la risoluzione dei nomi DNS dei container, utile per diagnosticare problemi con i servizi di rete:

Terminale

docker exec -it <container_name> nslookup <target_container_name>

Esempio di utilizzo di nc host port

Lo strumento nc è utilizzato per il debugging e la diagnostica delle connessioni di rete. Con il comando nc host port puoi stabilire una connessione con un determinato host e porta, controllando la disponibilità della porta sull'host di destinazione:

Terminale

docker exec -it <container_name> nc -zv 192.168.1.1 22

8.4 Verifica della configurazione di Docker e dei file di rete

Configurazioni errate di Docker e dei file di rete possono causare problemi di rete.

Verifica del file docker-compose.yml

Assicurati che il file docker-compose.yml sia configurato correttamente e che tutte le reti, i servizi e le porte siano specificati correttamente.

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 del file /etc/docker/daemon.json

Controlla la configurazione di Docker Daemon se è stata modificata:

JSON

{
  "dns": ["8.8.8.8", "8.8.4.4"],
  "fixed-cidr": "192.168.1.0/24"
}

8.5 Controllo dei log di sistema di Docker

I log di sistema di Docker possono contenere informazioni utili sugli errori di rete e i problemi.

Visualizzazione dei log di Docker

Usa il comando journalctl per vedere i log di Docker sui sistemi con systemd:

Terminal

journalctl -u docker.service

Visualizzazione dei log dei container

I log dei container possono anche aiutare nella diagnosi dei problemi di rete:

Terminal

docker logs <container_name>

8.6: Uso dei comandi di rete di Docker

Docker offre comandi per diagnosticare e gestire le reti, come docker network inspect e docker network connect.

Comando docker network inspect

Questo comando permette di ottenere informazioni dettagliate sulla rete, inclusi i container collegati e le configurazioni IPAM.

Terminale

docker network inspect <network_name>

Esempio di output del 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 il container è stato collegato male alla rete, puoi collegarlo manualmente:

Terminale

docker network connect <network_name> <container_name>

8.7 Esempi di diagnostica e risoluzione dei problemi

Esempio 1: Problemi con la conversione del nome di dominio in IP tramite DNS

Se i container non riescono a convertire i nomi degli host di altri container, controlla le impostazioni DNS:

Controllo delle impostazioni DNS in docker-compose.yml:

Yaml

version: '3.8'

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

Controllo del DNS all'interno del container:

Terminal

docker exec -it <container_name> cat /etc/resolv.conf

Esempio 2: Problemi con l'accesso ai servizi

Se i container non riescono ad accedere ai servizi su altri host:

Controllo delle porte pubblicate:

Terminal

docker ps

Controllo delle regole del firewall:

Assicurati che le regole del firewall non blocchino le porte necessarie.

Esempio 3: Conflitto di indirizzi IP

Se hai un conflitto di indirizzi IP tra i container o con l'host:

Controllo della subnet della rete:

Terminal

docker network inspect <network_name>

Cambio della subnet:

Terminal

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