През юли 2019 г., официална докер документация:
Източник:https://docs.docker.com/compose/compose-file/ #връзки
Решение №1:файл на средата преди стартиране
По принцип ние централизираме всички конфигурации във файл с променливи на средата и го изпълнете преди docker-compose up
Следният подход ми помогна в тези сценарии:
- Вашият docker-compose.yml има няколко контейнера със сложни зависимости между тях
- Някои от вашите услуги във вашия docker-compose трябва да се свържат с друг процес в същата машина. Този процес може да бъде докер контейнер или не.
- Трябва да споделяте променливи между няколко докер композирани файла като хост, пароли и т.н.
Стъпки
1.- Създайте един файл за централизиране на конфигурациите
Този файл може да се наименува:/env/company_environments с разширение или не.
export MACHINE_HOST=$(hostname -I | awk '{print $1}')
export GLOBAL_LOG_PATH=/my/org/log
export MONGO_PASSWORD=mypass
export MY_TOKEN=123456
2.- Използвайте променливите env във вашия docker-compose.yml
контейнер А
app_who_needs_mongo:
environment:
- MONGO_HOST=$MACHINE_HOST
- MONGO_PASSWORD=$MONGO_PASSWORD
- TOKEN=$MY_TOKEN
- LOG_PATH=$GLOBAL_LOG_PATH/app1
контейнер B
app_who_needs_another_db_in_same_host:
environment:
- POSTGRESS_HOST=$MACHINE_HOST
- LOG_PATH=$GLOBAL_LOG_PATH/app1
3.- Стартирайте вашите контейнери
Просто добавете източник преди командите за съставяне на docker:
source /env/company_environments
docker-compose up -d
Решение №2:host.docker.internal
https://stackoverflow.com/a/63207679/3957754
По принцип използвайте функция на docker, в която host.docker.internal може да се използва като ip на сървъра, в който вашият docker-compose е стартирал няколко контейнера