Mit Andockfenster " launch web app können keine Verbindung zu einem Postgresql-DB?
Erhalte ich die folgende Fehlermeldung, wenn Sie versuchen zu schreiben, session-Daten mit der Tomcat PersistentManager zu einer Postgres-DB läuft auf meinem lokalen Rechner:
SEVERE: A SQL exception occurred org.postgresql.util.PSQLException: Connection to localhost:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.
Die Anwendung selbst läuft in einem docker-container. Der Vollständigkeits halber, mein Strom context.xml Datei:
<?xml version='1.0' encoding='utf-8'?>
<Context>
<Manager className="org.apache.catalina.session.PersistentManager"
distributable="true" processExpiresFrequency="6" maxIdleBackup="0" debug="99" >
<Store className="org.apache.catalina.session.JDBCStore"
driverName="org.postgresql.Driver"
connectionURL="jdbc:postgresql://localhost/admin?stringtype=unspecified"
connectionName="admin" connectionPassword="admin"
sessionAppCol="app_name" sessionDataCol="session_data" sessionIdCol="session_id"
sessionLastAccessedCol="last_access" sessionMaxInactiveCol="max_inactive"
sessionTable="tomcat_sessions_tb" sessionValidCol="valid_session" />
</Manager>
</Context>
Gemäß den Anregungen hier: Postgresql : Connection refused. Überprüfen Sie, dass der hostname und port korrekt sind und dass der postmaster ist das akzeptieren von TCP/IP-verbindungen
Bestätigte ich, über eine netstat -aln | grep LISTEN
dass Postgresql läuft, und die richtigen ports überwacht werden:
tcp4 0 0 127.0.0.1.5432 *.* LISTEN
tcp6 0 0 ::1.5432 *.* LISTEN
wird und dass meine postgresql.conf (befindet sich in usr/local/var/postgres
) hat listen_addresses = localhost und port = 5432, die Spiegel der host und port von meinem Laufenden server in Pgadmin3.
Ich vermute, dass das problem ist, dass Docker läuft in einer VM, und damit die lokalen Informationen, die ich erhalten haben, möglicherweise nicht die ganze Geschichte. Lesen Sie die verfügbaren Informationen online, es scheint, dass ich möglicherweise benötigen irgendeine Art von bridged-Netzwerk.
Aber ich gebe zu, ich bin ein Neuling in diesem Bereich, und ich bin mir nicht sicher, wie man es einrichten.
- Ich habe seit verschoben memcached, und bin mit einem nahezu identischen Fehler. Ich bin überzeugt, jetzt ist es das bridging, aber ich bin mir nicht sicher, wie den Ansatz von Docker-Seite der Dinge.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Warum kann ich KEINE Verbindung zu localhost:5432?
Katze Ihren container
/etc/hosts
Für docker-Netzwerke ist
bridge
standardmäßig dielocalhost
im inneren-Punkte, um container selbst(Andockfenster Standard-Netzwerk-bridge).Dann müssen Sie nicht
5432
hören im container:Lösung 1. Wenn Sie wollen, fest die "localhost:5432" innerhalb Ihrer config-xml, ist der einfachste Weg erstellen Sie Ihre container mit der option "--net host=":
Lösung 2. Ändern Sie die
localhost
Ihrer docker host-ip im inneren des Behälters/etc/hosts
den localhost zu docker-host-ip -:Lösung 3. Ändern Sie Ihre db-config-Datei ein alias verwenden, anstatt
localhost
:Dann fügen Sie die
DB_ALIAS
zu den container-hosts :Wenn Sie docker-bilden zusammen mit postgres Bild, als Sie wiederverwenden können service-Namen als IP innerhalb jdbc-Verbindung (hier: app-db)