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 :
- Vérification de l'état des conteneurs et des réseaux
- Utilisation des outils réseaux à l'intérieur des conteneurs
- Vérification de la configuration des fichiers Docker et réseaux
- Examen des journaux système de Docker
- 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
:
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 :
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 :
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
:
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 :
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 :
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.
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 :
{
"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
:
journalctl -u docker.service
Visualisation des logs des conteneurs
Les logs des conteneurs peuvent aussi aider à diagnostiquer des problèmes réseau :
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.
docker network inspect <network_name>
Exemple de sortie de la commande 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": {}
}
]
Commande docker network connect
Si un conteneur a été mal connecté au réseau, tu peux le connecter manuellement :
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 :
version: '3.8'
services:
web:
image: nginx:latest
dns:
- 8.8.8.8
Vérification du DNS
à l'intérieur du conteneur :
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 :
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 :
docker network inspect <network_name>
Modification du sous-réseau :
docker network create --subnet=192.168.2.0/24 my_network
GO TO FULL VERSION