Em julho de 2019, documentação oficial do docker:
Fonte:https://docs.docker.com/compose/compose-file/ #links
Solução nº 1:arquivo de ambiente antes do início
Basicamente Centralizamos todas as configurações em um arquivo com variáveis de ambiente e execute-o antes de compor docker-up
A abordagem a seguir me ajudou nesses cenários:
- Seu docker-compose.yml tem vários contêineres com dependências complexas entre eles
- Alguns de seus serviços no docker-compose precisam se conectar a outro processo na mesma máquina. Esse processo pode ser um contêiner docker ou não.
- Você precisa compartilhar variáveis entre vários arquivos de composição do docker, como host, senhas, etc
Etapas
1.- Crie um arquivo para centralizar as configurações
Este arquivo pode ser nomeado:/env/company_environments com extensão ou não.
export MACHINE_HOST=$(hostname -I | awk '{print $1}')
export GLOBAL_LOG_PATH=/my/org/log
export MONGO_PASSWORD=mypass
export MY_TOKEN=123456
2.- Use as variáveis env em seu docker-compose.yml
contêiner A
app_who_needs_mongo:
environment:
- MONGO_HOST=$MACHINE_HOST
- MONGO_PASSWORD=$MONGO_PASSWORD
- TOKEN=$MY_TOKEN
- LOG_PATH=$GLOBAL_LOG_PATH/app1
contêiner B
app_who_needs_another_db_in_same_host:
environment:
- POSTGRESS_HOST=$MACHINE_HOST
- LOG_PATH=$GLOBAL_LOG_PATH/app1
3.- Inicialize seus contêineres
Basta adicionar a fonte antes dos comandos docker-compose:
source /env/company_environments
docker-compose up -d
Solução nº 2:host.docker.internal
https://stackoverflow.com/a/63207679/3957754
Basicamente, use um recurso do docker no qual host.docker.internal poderia ser usado como o ip do servidor no qual seu docker-compose iniciou vários contêineres