Rapport de troubleshooting - DeumeniDerval/admin-2 GitHub Wiki

🐞 Rapport de Bug : Problème de communication entre conteneurs Docker avec des fichiers docker-compose.yml séparés

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 :

  1. Créer deux fichiers docker-compose.yml dans des répertoires séparés, l'un pour Nginx et l'autre pour PHP-FPM.
  2. Définir chacun des services dans leurs fichiers respectifs sans spécifier de réseau commun.
  3. Démarrer les services avec docker-compose up -d dans leurs répertoires respectifs.
  4. 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 :

  1. Vérification des logs de Nginx :

    Les logs indiquent une erreur de type connect() failed (111: Connection refused) while connecting to upstream.

  2. 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.

  3. 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

  1. Démarrer les services avec la commande docker-compose up -d.

  2. Accéder à une page PHP via le navigateur.

  3. Vérifier que la page est correctement interprétée et affichée.

  4. Consulter les logs de Nginx pour s'assurer de l'absence d'erreurs liées à l'upstream.

  5. 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.