Listen_addresses und pg_hba.conf beim Zugriff von Docker Container auf PostgreSQL Docker Container

Hallo zusammen!
Ja. Ein langer Themen-Name aber ich finde einfach keine brauchbare Info dazu und hätte mir irgendwo genau diese Überschrift gewünscht. :wink:

Ich bin erst ganz neu mit PostgreSQL unterwegs, da eine Software die wir nutzen zukünftig nicht mehr für MySQL weiterentwickelt wird. Aber auch nicht schlecht. So lerne ich auch noch was neues.

Ich habe zwei Docker Container. In einem die Anwendung (app) und in dem anderen PostgreSQL (postgres). Über Docker Networks dürfen sie aufeinander zugreifen. Das läuft dann über den Container Namen als DNS-Namen. Ich gebe bei allen Verbindungseeinstellungen also nur “postgres” als DB-Host an.

Das funktioniert aber nur, wenn ich in der postgresql.conf folgendes bei listen_addresses setze:
listen_addresses = '*'
Wenn ich hier den App-Hostnamen eingebe, bekomme ich folgende Meldungen:

[1] LOG:  could not bind IPv4 address "172.27.0.3": Cannot assign requested address
[1] WARNING:  could not create listen socket for "app"
[1] FATAL:  could not create any TCP/IP sockets
[1] LOG:  database system is shut down

In der pg_hba.conf bin ich schon etwas weiter. Da habe ich herausgefunden, dass ich den App-Hostnamen + Docker Netzwerknamen eingeben muss:
host app app app.docker_postgres md5
Nur der App-Hostname bringt folgenden Fehler:

[33] FATAL:  no pg_hba.conf entry for host "172.22.0.3", user "app", database "app", no encryption
[33] DETAIL:  Client IP address resolved to "app.docker_postgres", forward lookup not checked.

IP Adressen kann ich keine verwenden, da die sich bei jedem Docker oder Server Neustart verändern.

Hat irgendwer eine Idee, wie ich es richtig / sauber einstellen könnte?

Vielen Dank schon mal im Voraus!
Gruß Nilx

listen_addresses ist die Adresse, auf der der Server lauscht. Also, wenn da ein ‘’ ist, lauscht er auf allen Netzwerinterface/Karten/Adressen, die er hat. Das '’ dürfte daher für Dich hier okay sein.
hba_conf: wenn Du nicht vorher weißt, von wo die Clients kommen, gibst Du alle potentiellen IPs ein. Wenn das mit der Auflösung des Client-Hostnamens so funktioniert, ist auch gut.

Also, was genau ist das Problem jetzt, Du hast doch eine funktionierende Lösung, oder?

Hey akretschmer!
Vielen Dank für deine schnelle Antwort.

Ich habe halt an allen möglichen Stellen gelesen, dass diese beiden Einstellungen wichtig sind um ungewollte Zugriffe zu verhindern. Das macht auch das Docker Network aber wenn es einfach möglich gewesen wäre, hätte ich es auf der Ebene auch eingeschränkt.

Mit dem passenden Eintrag in der hba_conf, wird der Zugriff schon mal verhindert aber erst von der Datenbank selbst. Über den Listener könnte ich es noch etwas vorher aussperren aber auch nur, wenn es über einen DNS Namen funktionieren würde.

Gruß Nilx

Die listen_adresses ist nur interessant, wenn Du mehrer Netzwerkkarten hast, dann kannst Du halt festlegen, es soll nur an das eine Netz gebunden werden. Für deinen Container sollte aber * passend sein.

pg_hba denkst Du Dir am besten als eine Firewall vor der eigentlichen Datenbank.

Dieses Thema wurde automatisch 60 Tage nach der letzten Antwort geschlossen. Es sind keine neuen Antworten mehr erlaubt.