Basta utilizzare la rete bridge definita dall'utente. Innanzitutto, sfrutta le tue conoscenze leggendo una breve spiegazione dei diversi tipi di reti in Docker:https://docs.docker.com/network/bridge/
In secondo luogo, definisci la tua rete
docker network create foo
Quindi, esegui i tuoi container connected a questa rete:
docker run --rm --env-file /path/to/variables -d --network foo django_app:test
docker run --rm -d ... --network foo postgres:alpine ...
Nota in entrambi i comandi --network foo
. Inoltre non ti serve per esporre le porte in questo caso - all'interno di reti definite dall'utente viene eseguito automaticamente:
I container collegati alla stessa rete bridge definita dall'utente espongono automaticamente tutte le porte l'una all'altra e nessuna porta al mondo esterno. Ciò consente alle applicazioni containerizzate di comunicare tra loro facilmente, senza aprire accidentalmente l'accesso al mondo esterno.
Terzo, dai ai tuoi contenitori nomi host leggibili dall'uomo con --name bar
docker run ... --network foo --name my-django django_app:test ...
docker run ... --network foo --name my-postgres postgres:alpine ...
E infine correggi la stringa di connessione:cambia da localhost
al nome del contenitore, come my-postgres
:
...
POSTGRES_HOST=my-postgres
...