Rapport de troubleshooting - DeumeniDerval/admin-2 GitHub Wiki
docker-compose.yml
séparés
🐞 Rapport de Bug : Problème de communication entre conteneurs Docker avec des fichiers 1. Description complète du bug (Bug Report)
Contexte :
Dans le cadre du développement d'une application web, nous avons mis en place deux services distincts : un serveur Nginx et un interpréteur PHP-FPM, chacun défini dans des fichiers docker-compose.yml
séparés.
Problème rencontré :
Lors de l'accès à une page PHP via Nginx, une erreur 502 Bad Gateway est retournée. Les logs de Nginx indiquent une tentative de connexion échouée à l'upstream PHP-FPM.
Reproduction du bug :
- Créer deux fichiers
docker-compose.yml
dans des répertoires séparés, l'un pour Nginx et l'autre pour PHP-FPM. - Définir chacun des services dans leurs fichiers respectifs sans spécifier de réseau commun.
- Démarrer les services avec
docker-compose up -d
dans leurs répertoires respectifs. - Accéder à une page PHP via le serveur Nginx.
Résultat attendu :
La page PHP devrait être correctement interprétée et affichée.
Résultat obtenu :
Une erreur 502 Bad Gateway est retournée.
2. Analyse du problème
Étapes d'investigation :
-
Vérification des logs de Nginx :
Les logs indiquent une erreur de type
connect() failed (111: Connection refused) while connecting to upstream
. -
Inspection des réseaux Docker :
Chaque service est attaché à un réseau distinct, généré automatiquement par Docker Compose en fonction du nom du répertoire.
-
Test de connectivité entre les conteneurs :
Depuis le conteneur Nginx, un ping vers le conteneur PHP-FPM échoue, indiquant une absence de communication entre les deux.
3. Explication du problème
Docker Compose crée par défaut un réseau isolé pour chaque projet, basé sur le nom du répertoire contenant le fichier docker-compose.yml
. Ainsi, les services définis dans des fichiers séparés sont attachés à des réseaux différents et ne peuvent pas communiquer entre eux.
4. Description de la solution
Approche adoptée :
Fusionner les définitions des services Nginx et PHP-FPM dans un seul fichier docker-compose.yml
, assurant ainsi qu'ils partagent le même réseau par défaut.
Nouveau fichier docker-compose.yml
:
services:
nginx:
build: ./nginx
ports:
- "80:80"
volumes:
- ./nginx/conf:/etc/nginx/conf.d
- ./app:/var/www/html
php:
build: ./php
volumes:
- ./app:/var/www/html
Cette configuration assure que les deux services sont sur le même réseau, permettant à Nginx de communiquer avec PHP-FPM via le nom de service php
.
5. Procédure de validation
-
Démarrer les services avec la commande
docker-compose up -d
. -
Accéder à une page PHP via le navigateur.
-
Vérifier que la page est correctement interprétée et affichée.
-
Consulter les logs de Nginx pour s'assurer de l'absence d'erreurs liées à l'upstream.
-
Depuis le conteneur Nginx, effectuer un ping vers le service PHP-FPM pour confirmer la connectivité :
docker exec -it nginx ping php
Ce rapport met en évidence l'importance de la configuration des réseaux dans Docker Compose pour assurer la communication entre les services.