Basta fazer uso da rede de ponte definida pelo usuário. Primeiro, aproveite seu conhecimento lendo uma breve explicação dos diferentes tipos de redes no Docker:https://docs.docker.com/network/bridge/
Segundo, defina sua própria rede
docker network create foo
Em seguida, execute seus contêineres conectados para esta rede:
docker run --rm --env-file /path/to/variables -d --network foo django_app:test
docker run --rm -d ... --network foo postgres:alpine ...
Observe em ambos os comandos
--network foo
. Além disso, você não precisa para expor portas neste caso - dentro de redes definidas pelo usuário, isso é feito automaticamente:
Os contêineres conectados à mesma rede bridge definida pelo usuário expõem automaticamente todas as portas umas às outras e nenhuma porta ao mundo exterior. Isso permite que aplicativos em contêiner se comuniquem facilmente, sem abrir acidentalmente o acesso ao mundo exterior.
Terceiro, dê aos seus contêineres nomes de host legíveis por humanos com
--name bar
docker run ... --network foo --name my-django django_app:test ...
docker run ... --network foo --name my-postgres postgres:alpine ...
E, finalmente, corrija a string de conexão - mude de
localhost
para o nome do contêiner, como my-postgres
:...
POSTGRES_HOST=my-postgres
...