Wystarczy skorzystać ze zdefiniowanej przez użytkownika sieci mostkowej. Najpierw wykorzystaj swoją wiedzę, czytając krótkie wyjaśnienie różnych typów sieci w Docker:https://docs.docker.com/network/bridge/
Po drugie, zdefiniuj własną sieć
docker network create foo
Następnie uruchom kontenery połączone do tej sieci:
docker run --rm --env-file /path/to/variables -d --network foo django_app:test
docker run --rm -d ... --network foo postgres:alpine ...
Zauważ w obu poleceniach --network foo
. Również nie potrzebujesz aby odsłonić porty w tym przypadku - w sieciach zdefiniowanych przez użytkownika odbywa się to automatycznie:
Kontenery podłączone do tej samej zdefiniowanej przez użytkownika sieci mostowej automatycznie udostępniają wszystkie porty sobie nawzajem, a żadnych portów światu zewnętrznemu. Pozwala to aplikacjom znajdującym się w kontenerach na łatwą komunikację między sobą, bez przypadkowego otwierania dostępu do świata zewnętrznego.
Po trzecie, nadaj swoim kontenerom nazwy hostów czytelne dla człowieka za pomocą --name bar
docker run ... --network foo --name my-django django_app:test ...
docker run ... --network foo --name my-postgres postgres:alpine ...
I na koniec popraw parametry połączenia - zmień z localhost
do nazwy kontenera, np. my-postgres
:
...
POSTGRES_HOST=my-postgres
...