Il peut arriver que vous ayez deux fichiers docker-compose
distincts et que vous souhaitiez que l’un puisse accéder aux services de l’autre, comme par exemple une base de données.
Je vais d’abord vous montrer le cas où ca ne fonctionne pas, mais si vous voulez la solution directement allez directement à la solution
pour en savoir plus : sur le site docker
Le cas
Nous allons créer deux dossiers : ketchup et layo. Dans chacun de ces dossiers, nous placerons un fichier docker-compose
.

docker-compose ketchup
version: "3"
services:
bashketchup:
image: bash
stdin_open: true # docker run -i
tty: true # docker run -t
docker-compose layo
version: "3"
services:
bashlayo:
image: bash
stdin_open: true # docker run -i
tty: true # docker run -t
Pour démarrer les deux services, ouvrez deux terminaux distincts et lancez les commandes suivantes dans chaque dossier :
docker-compose build **&&** docker-compose up -d
Pour vérifier que les deux conteneurs sont en cours d’exécution, utilisez la commande :
docker ps
Vous devriez voir apparaître les deux conteneurs dans la liste.

Pour accéder aux shells de chaque conteneur, utilisez la commande suivante en remplaçant <nom_service> par le nom du service (ex. bashketchup ou bashlayo) :
docker-compose exec <nom service> bash
Ensuite, nous allons essayer de faire un ping entre les deux conteneurs. Pour cela, il faut obtenir leurs adresses IP respectives. Utilisez ifconfig pour les trouver.

Essayez ensuite de faire un ping de l’un vers l’autre.

Vous verrez que cela ne fonctionne pas. En effet, chaque fichier docker-compose crée un réseau « bridge » distinct pour les services qu’il contient, empêchant ainsi les conteneurs de différents réseaux de communiquer.
on peut voir l’état du réseau via une extension portnavigator sur dockerdesktop (mac)

La solution
Pour permettre cette communication, nous allons connecter le conteneur de ketchup
au réseau existant de layo
.
Modification du docker-compose de ketchup
Voici la configuration mise à jour pour le fichier docker-compose
dans le dossier ketchup :
version: "3"
services:
bashketchup:
image: bash
stdin_open: true # docker run -i
tty: true # docker run -t
**networks:
- layo
networks:
layo:
name: layo_default
external: true**
Avec cette modification, le conteneur bashketchup
sera connecté au réseau layo_default
, qui est le réseau du fichier docker-compose
du dossier layo
.
Redémarrez le service ketchup
en exécutant :
docker-compose up -d
Vous pouvez maintenant vérifier l’état du réseau.

Répétez le test de ping entre les deux conteneurs.

Et voilà ! Les deux conteneurs, bien que dans des docker-compose différents, peuvent maintenant communiquer entre eux. Cette méthode est particulièrement utile lorsque vous souhaitez que plusieurs services partagent la même base de données, par exemple.
Bien évidemment il existe d’autre moyen de communiquer: par exemple via commande docker pour s’attacher à un bridge.
Je suis Pascal Yu, je vous aide à développer vos solutions à l’aide de Symfony.
Prend un rendez vous gratuitement avec moi pour savoir comment je peux vous aider.