Nutzen Sie einfach benutzerdefinierte Bridge-Netzwerke. Nutzen Sie zunächst Ihr Wissen, indem Sie eine kurze Erklärung der verschiedenen Arten von Netzwerken in Docker lesen:https://docs.docker.com/network/bridge/
Definieren Sie zweitens Ihr eigenes Netzwerk
docker network create foo
Führen Sie als Nächstes Ihre Container verbunden aus zu diesem Netzwerk:
docker run --rm --env-file /path/to/variables -d --network foo django_app:test
docker run --rm -d ... --network foo postgres:alpine ...
Beachten Sie in beiden Befehlen --network foo
. Auch brauchen Sie nicht um in diesem Fall Ports offenzulegen - innerhalb benutzerdefinierter Netzwerke geschieht dies automatisch:
Container, die mit demselben benutzerdefinierten Bridge-Netzwerk verbunden sind, legen automatisch alle Ports füreinander und keine Ports für die Außenwelt offen. Dadurch können containerisierte Anwendungen einfach miteinander kommunizieren, ohne versehentlich den Zugang zur Außenwelt zu öffnen.
Drittens geben Sie Ihren Containern menschenlesbare Hostnamen mit --name bar
docker run ... --network foo --name my-django django_app:test ...
docker run ... --network foo --name my-postgres postgres:alpine ...
Und korrigieren Sie schließlich die Verbindungszeichenfolge - ändern Sie sich von localhost
zum Containernamen, wie my-postgres
:
...
POSTGRES_HOST=my-postgres
...