W lipcu 2019 r. oficjalna dokumentacja dokera:
Źródło:https://docs.docker.com/compose/compose-file/ #linki
Rozwiązanie nr 1:plik środowiska przed startem
Zasadniczo centralizujemy wszystkie konfiguracje w pliku ze zmiennymi środowiskowymi i wykonaj go przed docker-compose up
Następujące podejście pomogło mi w tych scenariuszach:
- Twój docker-compose.yml ma kilka kontenerów ze złożonymi zależnościami między nimi
- Niektóre z Twoich usług w docker-compose muszą łączyć się z innym procesem na tym samym komputerze. Ten proces może być kontenerem dockera lub nie.
- Musisz udostępniać zmienne między kilkoma plikami docker-compose, takimi jak host, hasła itp.
Kroki
1.- Utwórz jeden plik, aby scentralizować konfiguracje
Ten plik może mieć nazwę:/env/company_environments z rozszerzeniem lub nie.
export MACHINE_HOST=$(hostname -I | awk '{print $1}')
export GLOBAL_LOG_PATH=/my/org/log
export MONGO_PASSWORD=mypass
export MY_TOKEN=123456
2.- Użyj zmiennych env w swoim docker-compose.yml
pojemnik A
app_who_needs_mongo:
environment:
- MONGO_HOST=$MACHINE_HOST
- MONGO_PASSWORD=$MONGO_PASSWORD
- TOKEN=$MY_TOKEN
- LOG_PATH=$GLOBAL_LOG_PATH/app1
kontener B
app_who_needs_another_db_in_same_host:
environment:
- POSTGRESS_HOST=$MACHINE_HOST
- LOG_PATH=$GLOBAL_LOG_PATH/app1
3.- Uruchom swoje kontenery
Po prostu dodaj źródło przed poleceniami docker-compose:
source /env/company_environments
docker-compose up -d
Rozwiązanie nr 2:host.docker.internal
https://stackoverflow.com/a/63207679/3957754
Zasadniczo użyj funkcji docker, w której host.docker.internal może być użyty jako ip serwera, na którym twój docker-compose uruchomił kilka kontenerów