Dépannage des problèmes de connectivité des conteneurs
Vous pouvez sauter cette étape si vous n'avez pas de problèmes de connectivité.
Maintenant que nous comprenons comment tester la connectivité entre les conteneurs, explorons comment résoudre les problèmes de connectivité courants.
Problèmes de connectivité courants
Lorsque vous travaillez avec les réseaux de conteneurs Docker, vous pouvez rencontrer plusieurs problèmes courants :
- Des conteneurs se trouvant sur des réseaux différents sans un routage approprié
- Des paramètres de pare-feu ou de groupe de sécurité bloquant le trafic
- Une application ne lisant pas sur l'IP/port attendu
- Des erreurs de configuration réseau
- Des problèmes de résolution DNS
Passons en revue les étapes de dépannage pour chacun de ces problèmes potentiels.
Vérification de la configuration réseau
Tout d'abord, examinons la configuration réseau de nos conteneurs :
## Affichez les interfaces réseau de container1
docker exec container1 ip addr show
## Affichez les interfaces réseau de container2
docker exec container2 ip addr show
La sortie montre toutes les interfaces réseau de chaque conteneur. Chaque réseau Docker connecté apparaît comme une interface eth
avec son adresse IP assignée.
Vérification des itinéraires réseau
Vérifions la configuration de routage dans nos conteneurs :
docker exec container1 route -n
Cela montre la table de routage de container1, indiquant où le trafic réseau est dirigé.
Vérification des ports d'écoute
Pour déterminer si une application écoute correctement les connexions, utilisez :
docker exec container2 netstat -tuln
Cela montre tous les ports d'écoute TCP et UDP. Notre serveur HTTP devrait écouter sur le port 8080.
Diagnostic avec tcpdump
Pour une analyse plus détaillée du trafic réseau, nous pouvons utiliser tcpdump
pour capturer et analyser les paquets :
## Installez tcpdump dans container1
docker exec container1 apt-get install -y tcpdump dnsutils
## Capturez les paquets pendant 10 secondes
docker exec container1 timeout 10 tcpdump -i eth0 -n
Pendant que cela tourne, ouvrez un autre terminal et générez du trafic :
docker exec container1 ping -c 3 container2
Vous devriez voir les paquets ICMP capturés dans la sortie de tcpdump.
Vérification de la résolution DNS Docker
Si vous rencontrez des problèmes de résolution DNS entre les conteneurs :
## Vérifiez la configuration DNS
docker exec container1 cat /etc/resolv.conf
## Testez la résolution DNS
docker exec container1 nslookup container2
Simulation d'un problème réseau
Simulons un problème de connectivité en déconnectant temporairement container1 de notre réseau personnalisé :
## Découvrez container1 de my-network
docker network disconnect my-network container1
## Essayez de pinger par nom (cela devrait échouer)
docker exec container1 ping -c 2 container2
Vous devriez voir que le ping échoue car container1 ne peut plus résoudre container2 par nom après avoir été déconnecté du réseau partagé.
Reconnectons-le :
## Reconnectez container1 à my-network
docker network connect my-network container1
## Vérifiez que la connectivité est restaurée
docker exec container1 ping -c 2 container2
Maintenant, le ping devrait fonctionner à nouveau, démontrant comment les conteneurs doivent se trouver sur le même réseau pour que la résolution de nom fonctionne.
Liste de contrôle pour le dépannage
Lorsque vous rencontrez des problèmes de connectivité des conteneurs, suivez cette liste de contrôle :
- Vérifiez que les conteneurs sont en cours d'exécution :
docker ps
- Vérifiez qu'ils sont sur le même réseau :
docker network inspect <réseau>
- Vérifiez que des adresses IP sont assignées :
docker inspect <conteneur>
- Testez la connectivité de base (ping) :
docker exec <conteneur> ping <cible>
- Vérifiez que l'application est en écoute :
docker exec <conteneur> netstat -tuln
- Vérifiez que la résolution DNS fonctionne :
docker exec <conteneur> nslookup <cible>
- Cherchez des problèmes de pare-feu :
docker exec <conteneur> iptables -L
- Vérifiez les journaux des conteneurs :
docker logs <conteneur>
En utilisant cette approche systématique, vous devriez être en mesure d'identifier et de résoudre la plupart des problèmes de connectivité des conteneurs.