PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Von einer dockerisierten App konnte keine Verbindung zum Postgres-Server in einem Docker hergestellt werden

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
...