9.1 Outils et commandes pour le débogage
Docker Compose simplifie grandement le développement et le déploiement des applications multi-conteneurs, mais comme avec toute technologie, des problèmes peuvent survenir nécessitant un débogage et une résolution. Dans cette leçon, on va voir les approches et outils principaux pour identifier et résoudre les erreurs dans Docker Compose.
Problèmes principaux et approches pour les résoudre :
- Problèmes avec le démarrage des conteneurs :
- Vérification des logs des conteneurs.
- Vérification de l'état des conteneurs.
- Vérification des fichiers de configuration.
- Problèmes de réseau :
- Vérification des connexions réseau.
- Utilisation des outils réseau à l'intérieur des conteneurs.
- Problèmes avec les volumes :
- Vérification du montage des volumes.
- Vérification des droits d'accès aux volumes.
Outils et commandes pour le débogage :
1. Afficher les logs des conteneurs
Les logs des conteneurs, c'est le premier endroit où chercher en cas de problème. La commande docker compose logs
permet d'afficher les logs de tous les services définis dans compose.yaml
.
docker compose logs
Vous pouvez spécifier un service particulier pour voir ses logs :
docker compose logs <service_name>
2. Vérifier l'état des conteneurs
La commande docker compose ps
affiche des informations sur l'état de tous les conteneurs gérés par Docker Compose.
docker compose ps
La sortie de cette commande montre l'état, les ports et les identifiants des conteneurs.
3. Redémarrer les conteneurs
Si un conteneur ne fonctionne pas correctement, essayez de le redémarrer :
docker compose restart <service_name>
4. Connexion à un conteneur actif
Pour examiner plus en détail un problème, vous pouvez vous connecter à un conteneur actif en utilisant la commande docker compose exec
.
docker compose exec <service_name> /bin/bash
Cette commande ouvre un terminal à l'intérieur du conteneur, ce qui permet d'exécuter des commandes de diagnostic.
5. Utilisation des outils réseau
Vérifier les connexions réseau à l'intérieur des conteneurs peut aider à diagnostiquer les problèmes liés au réseau. Vous pouvez utiliser des outils comme ping, curl, netcat, et autres.
docker compose exec <service_name> ping <hostname>
docker compose exec <service_name> curl http://<hostname>
docker compose exec <service_name> netcat -z -v <hostname> <port>
9.2 Approches avancées
Approches supplémentaires pour trouver des erreurs
1. Vérification du fichier Docker Compose
Les erreurs dans le fichier compose.yaml
peuvent entraîner un mauvais fonctionnement des conteneurs. Vérifie la syntaxe du fichier avec la commande :
docker compose config
Cette commande vérifiera le fichier pour des erreurs et affichera la configuration finale.
2. Utilisation de Healthcheck
Tu peux définir un healthcheck pour les services dans compose.yaml
, afin que Docker vérifie automatiquement l'état des conteneurs.
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "80:80"
healthcheck:
test: ["CMD-SHELL", "curl -f http://localhost || exit 1"]
interval: 30s
timeout: 10s
retries: 3
3. Vérification du montage des volumes
Les problèmes avec les volumes peuvent provenir d'un montage incorrect ou de droits insuffisants. Assure-toi que les volumes sont correctement montés et que les conteneurs y ont accès.
version: '3.8'
services:
db:
image: postgres:latest
volumes:
- db-data:/var/lib/postgresql/data
volumes:
db-data:
3.1 Vérification de l'accessibilité des volumes
Pour vérifier l'accessibilité d'un volume depuis un conteneur, tu peux exécuter un conteneur et lancer une commande qui vérifie la présence du volume (par exemple, la liste des fichiers dans le volume). Supposons que le volume est monté dans le conteneur à l'emplacement /mnt/volume :
docker run --rm -v my_volume:/mnt/volume alpine ls /mnt/volume
Si le volume est accessible, la commande ls
affichera la liste des fichiers et répertoires présents dans le volume. Si le volume est inaccessible ou vide, tu recevras un message correspondant.
3.2 Vérification de l'espace disponible dans le volume
Pour vérifier combien d'espace est disponible sur le volume depuis l'intérieur d'un conteneur, utilise la commande df
:
docker run --rm -v my_volume:/mnt/volume alpine df -h /mnt/volume
Elle affiche l'espace disponible sur le système de fichiers où le volume est monté. L'option -h
affiche les informations dans un format lisible (avec unités comme Mo, Go, etc.).
4. Utilisation d'une IDE
Pour faciliter le débogage, utilise une IDE avec des fonctions de debug et de logging intégrées. Tu peux créer des fichiers de configuration distincts pour le développement et la production, en utilisant le paramètre --file
.
docker compose --file docker-compose.dev.yml up
Important !
Voici une instruction utile pour configurer le débogage à distance d'une application exécutée dans Docker via IntelliJ IDEA : Configuration du débogage à distance .
5. Vérification des variables d'environnement
Des variables d'environnement incorrectes ou manquantes peuvent poser des problèmes. Assure-toi que toutes les variables nécessaires sont définies dans le fichier .env
ou directement dans compose.yaml
.
version: '3.8'
services:
app:
image: myapp:latest
environment:
- APP_ENV=development
- DEBUG=true
9.3 Exemples de commandes pour le débogage
Exemples d'utilisation des commandes pour le débogage
Exemple 1 : Vérification et correction d'une erreur de connexion à la base de données
Afficher les logs du service web
:
docker compose logs web
Vérification de la connexion réseau entre web
et db
:
docker compose exec web ping db
docker compose exec web curl http://db:5432
Connexion au conteneur web
pour diagnostic :
docker compose exec web /bin/bash
Exemple 2 : Vérification des problèmes avec les volumes
Vérification du montage des volumes :
version: '3.8'
services:
db:
image: postgres:latest
volumes:
- db-data:/var/lib/postgresql/data
volumes:
db-data:
Connexion au conteneur db
et vérification des données :
docker compose exec db /bin/bash
ls -l /var/lib/postgresql/data
GO TO FULL VERSION