CodeGym /Cours /Docker SELF /Résolution des problèmes de réseau

Résolution des problèmes de réseau

Docker SELF
Niveau 18 , Leçon 2
Disponible

8.1 Étapes principales pour diagnostiquer les problèmes réseau

Les problèmes réseau dans Docker peuvent survenir pour diverses raisons, comme une mauvaise configuration des réseaux, des problèmes de DNS, des conflits d'adresses IP, etc. Dans ce cours, on va explorer les méthodes principales pour diagnostiquer et résoudre les problèmes réseau dans Docker.

Si tu rencontres des problèmes réseau, il faut suivre ces étapes :

  1. Vérification de l'état des conteneurs et des réseaux
  2. Utilisation des outils réseaux à l'intérieur des conteneurs
  3. Vérification de la configuration des fichiers Docker et réseaux
  4. Examen des journaux système de Docker
  5. Utilisation des commandes réseau de Docker

8.2 Vérification de l'état des conteneurs et des réseaux

La première étape pour diagnostiquer les problèmes de réseau, c'est de vérifier l'état des conteneurs et des réseaux.

Vérification de l'état des conteneurs

D'abord, affichons tous les conteneurs en cours d'exécution. Pour ça, on utilise la commande docker ps :

Terminal

docker ps

Si les conteneurs ne sont pas démarrés, cela peut indiquer des problèmes avec Docker lui-même ou la configuration des conteneurs.

Vérification des réseaux

La commande docker network ls affiche tous les réseaux créés dans Docker :

Terminal

docker network ls

Assurez-vous que le réseau nécessaire existe et que les conteneurs y sont connectés.

8.3 Utilisation des outils réseau dans les conteneurs

Les outils réseau comme ping, curl, netcat (ou nc), et nslookup, peuvent aider à diagnostiquer les problèmes au sein des conteneurs. Chacun de ces outils a sa tâche spécifique :

  • ping — un outil pour vérifier la disponibilité des hôtes distants dans le réseau en leur envoyant des requêtes ICMP.
  • curl — un outil pour transférer des données via divers protocoles, souvent utilisé pour vérifier la disponibilité des services web.
  • netcat (nc) — un outil universel pour travailler avec les connexions réseau, permettant de créer des connexions TCP/UDP et de diagnostiquer la disponibilité des ports.
  • nslookup — un outil pour rechercher des informations sur les enregistrements DNS, par exemple pour vérifier la résolution des noms de conteneurs.

Exemple d'utilisation de ping

Connectez-vous au conteneur et testez la connexion avec un autre conteneur ou service en utilisant l'outil ping pour envoyer des requêtes ICMP :

Terminal

docker exec -it <container_name> ping <target_container_name_or_ip>

Exemple d'utilisation de curl

Vérifiez la disponibilité du service web dans un conteneur à l'aide de l'outil curl :

Terminal

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

Exemple d'utilisation de nslookup

Utilisez nslookup pour vérifier la résolution des noms DNS des conteneurs, ce qui est utile pour diagnostiquer des problèmes avec les services réseau :

Terminal

docker exec -it <container_name> nslookup <target_container_name>

Exemple d'utilisation de nc host port

L'outil nc est utilisé pour le débogage et le diagnostic des connexions réseau. Avec la commande nc host port, vous pouvez établir une connexion avec un hôte et un port donnés, en vérifiant la disponibilité du port sur l'hôte cible :

Terminal

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

8.4 Vérification de la configuration de Docker et des fichiers réseau

Des configurations incorrectes de Docker et des fichiers réseau peuvent causer des problèmes réseau.

Vérification du fichier docker-compose.yml

Assure-toi que le fichier docker-compose.yml est bien configuré et que tous les réseaux, services et ports sont correctement spécifiés.

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

Vérification du fichier /etc/docker/daemon.json

Vérifie la configuration de Docker Daemon si elle a été modifiée :

JSON

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

8.5 Vérification des journaux système Docker

Les journaux système Docker peuvent contenir des infos utiles sur les erreurs réseau et les problèmes.

Visualisation des journaux Docker

Utilise la commande journalctl pour voir les journaux Docker sur les systèmes utilisant systemd:

Terminal

journalctl -u docker.service

Visualisation des logs des conteneurs

Les logs des conteneurs peuvent aussi aider à diagnostiquer des problèmes réseau :

Terminal

docker logs <container_name>

8.6 : Utilisation des commandes réseau Docker

Docker fournit des commandes pour diagnostiquer et gérer les réseaux, comme docker network inspect et docker network connect.

Commande docker network inspect

Cette commande permet d'obtenir des informations détaillées sur le réseau, y compris les conteneurs connectés et les paramètres IPAM.

Terminal

docker network inspect <network_name>

Exemple de sortie de la commande 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": {}
    }
]

Commande docker network connect

Si un conteneur a été mal connecté au réseau, tu peux le connecter manuellement :

Terminal

docker network connect <network_name> <container_name>

8.7 Exemples de diagnostic et résolution de problèmes

Exemple 1 : Problèmes avec la traduction DNS des noms de domaine en IP

Si les conteneurs ne peuvent pas traduire les noms des hôtes d'autres conteneurs, vérifie les paramètres DNS :

Vérification des paramètres DNS dans docker-compose.yml :

Yaml

version: '3.8'

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

Vérification du DNS à l'intérieur du conteneur :

Terminal

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

Exemple 2 : Problèmes d'accès aux services

Si les conteneurs ne peuvent pas accéder aux services sur d'autres hôtes :

Vérification des ports publiés :

Terminal

docker ps

Vérification des règles du pare-feu :

Assure-toi que les règles du pare-feu ne bloquent pas les ports nécessaires.

Exemple 3 : Conflit d'adresses IP

Si tu rencontres un conflit d'adresses IP entre des conteneurs ou avec l'hôte :

Vérification du sous-réseau réseau :

Terminal

docker network inspect <network_name>

Modification du sous-réseau :

Terminal

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