Au mois de juillet 2019, documentation officielle de docker :
Source :https://docs.docker.com/compose/compose-file/ #liens
Solution #1 :fichier d'environnement avant le démarrage
En gros, nous centralisons toutes les configurations dans un fichier avec des variables d'environnement et exécutez-le avant docker-compose up
L'approche suivante m'a aidé dans ces scénarios :
- Votre docker-compose.yml a plusieurs conteneurs avec des dépendances complexes entre eux
- Certains de vos services dans votre docker-compose doivent se connecter à un autre processus sur la même machine. Ce processus peut être un conteneur docker ou non.
- Vous devez partager des variables entre plusieurs fichiers de composition docker comme l'hôte, les mots de passe, etc
Étapes
1.- Créez un fichier pour centraliser les configurations
Ce fichier pourrait être nommé :/env/company_environments avec extension ou non.
export MACHINE_HOST=$(hostname -I | awk '{print $1}')
export GLOBAL_LOG_PATH=/my/org/log
export MONGO_PASSWORD=mypass
export MY_TOKEN=123456
2.- Utilisez les variables env dans votre docker-compose.yml
conteneur A
app_who_needs_mongo:
environment:
- MONGO_HOST=$MACHINE_HOST
- MONGO_PASSWORD=$MONGO_PASSWORD
- TOKEN=$MY_TOKEN
- LOG_PATH=$GLOBAL_LOG_PATH/app1
conteneur B
app_who_needs_another_db_in_same_host:
environment:
- POSTGRESS_HOST=$MACHINE_HOST
- LOG_PATH=$GLOBAL_LOG_PATH/app1
3.- Démarrez vos conteneurs
Ajoutez simplement la source avant les commandes docker-compose :
source /env/company_environments
docker-compose up -d
Solution #2 :hôte.docker.interne
https://stackoverflow.com/a/63207679/3957754
Utilisez essentiellement une fonctionnalité de docker dans laquelle host.docker.internal peut être utilisé comme adresse IP du serveur sur lequel votre docker-compose a démarré plusieurs conteneurs