Intermédiaire40 min30 XP
Objectifs de cette leçon
- Debugger les problèmes courants Docker
- Utiliser les logs et le monitoring
- Résoudre les problèmes de réseau et de permissions
Debugging Docker 🐛
Les outils de diagnostic
┌──────────────────────────────────────────────────┐ │ Outils de debugging Docker │ ├──────────────┬───────────────┬────────────────────┤ │ docker logs │ docker exec │ docker inspect │ │ (voir les │ (accéder │ (détails complets)│ │ sorties) │ au conteneur)│ │ ├──────────────┼───────────────┼────────────────────┤ │ docker stats│ docker top │ docker diff │ │ (ressources)│ (processus) │ (modifications) │ └──────────────┴───────────────┴────────────────────┘
1. docker logs — Voir les sorties
# Voir les logs docker logs mon-conteneur # Suivre les logs en temps réel docker logs -f mon-conteneur # Voir les 50 dernières lignes docker logs --tail 50 mon-conteneur # Voir les logs avec timestamps docker logs -t mon-conteneur # Voir les logs depuis une heure docker logs --since 1h mon-conteneur # Voir les erreurs uniquement docker logs mon-conteneur 2>&1 | grep -i error
2. docker exec — Accéder au conteneur
# Ouvrir un terminal docker exec -it mon-conteneur bash # Si pas de bash, utiliser sh docker exec -it mon-conteneur sh # Exécuter une commande spécifique docker exec mon-conteneur cat /etc/nginx/nginx.conf # Voir les variables d'environnement docker exec mon-conteneur env # Voir les processus docker exec mon-conteneur ps aux # Tester un service externe depuis le conteneur docker exec mon-conteneur ping postgres
3. docker inspect — Détails complets
# Informations complètes docker inspect mon-conteneur # IP du conteneur docker inspect --format='{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mon-conteneur # Port mappé docker inspect --format='{{range $p, $conf := .NetworkSettings.Ports}}{{$p}} -> {{(index $conf 0).HostPort}}{{end}}' mon-conteneur # Mounts (volumes) docker inspect --format='{{json .Mounts}}' mon-conteneur | python3 -m json.tool
4. docker stats — Ressources en temps réel
# Voir l'usage CPU, mémoire, réseau docker stats # Résultat : # CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O # mon-app 2.5% 128MiB / 512MiB 25% 1.2MB / 500kB # postgres 0.1% 64MiB / 1GiB 6.2% 100kB / 200kB # Stats d'un conteneur spécifique docker stats mon-app --no-stream
5. docker top — Processus
# Voir les processus dans le conteneur docker top mon-conteneur # Résultat : # UID PID PPID C STIME TTY TIME CMD # 1000 1234 1230 0 10:00 ? 00:00:01 node server.js
6. docker diff — Modifications
# Voir les fichiers modifiés dans le conteneur docker diff mon-conteneur # Résultat : # C /app/logs (Changed) # A /app/temp.txt (Added) # D /app/old.txt (Deleted)
Problèmes courants et solutions
1. Conteneur qui s'arrête immédiatement
# Voir la raison de l'arrêt docker logs mon-conteneur # Voir le code de sortie docker inspect --format='{{.State.ExitCode}}' mon-conteneur # Codes courants : # 0 → Arrêt normal # 1 → Erreur de l'application # 126 → Permission refusée # 127 → Commande non trouvée # 137 → OOM Killed (manque de mémoire)
2. Conteneur ne démarre pas
# Diagnostic complet docker logs mon-conteneur 2>&1 docker inspect mon-conteneur | grep -A 5 "State" # Vérifier les dépendances docker compose ps
3. Problème réseau
# Vérifier le réseau docker network ls docker network inspect bridge # Tester la connectivité depuis le conteneur docker exec mon-app ping postgres docker exec mon-app curl http://api:8000/health
4. Problème de permissions
# Voir les permissions docker exec mon-app ls -la /app # Corriger les permissions docker exec mon-app chown -R node:node /app # Ou dans le Dockerfile RUN chown -R node:node /app USER node
Scénario de debugging complet
# 1. Le conteneur plante docker compose up -d docker compose logs app # → Erreur : "Cannot find module 'express'" # 2. Accéder au conteneur docker compose exec app sh # 3. Vérifier node_modules ls node_modules/ # → Dossier vide ! # 4. Diagnostic cat package.json | grep express # → express est dans dependencies # 5. Solution : Rebuild sans cache docker compose build --no-cache app docker compose up -d
Commandes utiles
| Commande | Usage |
|---|---|
docker logs -f | Suivre les logs en temps réel |
docker exec -it sh | Accéder au shell |
docker inspect | Détails complets |
docker stats | Usage ressources |
docker top | Processus |
docker diff | Modifications |
docker system df | Espace disque utilisé |
Exercices 🎯
- Logs : Lancez un conteneur et observez ses logs.
- Shell : Accédez au shell d'un conteneur et naviguez dans le filesystem.
- Debug : Créez un conteneur avec une erreur, diagnostiquez-la avec les outils Docker.
- Réseau : Vérifiez la connectivité entre deux conteneurs.
Prochaine leçon : Optimisation et bonnes pratiques.
Debugging Docker
Essayez chaque commande$ docker logs <container>Affiche les logs du conteneur
# Sortie :
2024-01-01 10:00:00 [INFO] Server started
2024-01-01 10:00:01 [ERROR] Connection refused
✅ Logs récupérés — erreur de connexion BDD détectée
1/4