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

Kann mit Docker zum Starten der Web-App keine Verbindung zu Postgresql DB herstellen?

Warum kann ich mich NICHT mit localhost:5432 verbinden?

Cat die /etc/hosts Ihres Containers

$ sudo docker exec -it [container] cat /etc/hosts

Für Docker-Netzwerke ist bridge standardmäßig der localhost inside verweist auf den Container selbst (Docker-Standardbrückennetzwerk ). ).Dann haben Sie 5432 nicht Abhören in Ihrem Container:

$ sudo docker exec [container] nc -v -z localhost 5432

Lösung 1. Wenn Sie „localhost:5432“ in Ihrer Konfigurations-XML hartcodieren möchten, erstellen Sie Ihren Container am einfachsten mit der Option „--net=host“:

$ sudo docker run --net=host -it ...

Lösung 2. Ändern Sie den localhost Ihrer Docker-Host-IP im Container
  • Holen Sie sich Ihre Docker-Host-IP
    $ sudo docker inspect -f '{{ .NetworkSettings.Gateway }}' 
    192.168.5.1
  • Geben Sie Ihren Container ein:
    $ sudo docker exec -it [container] /bin/bash
  • Bearbeiten Sie die Datei /etc/hosts um den localhost auf docker host ip zu verweisen :
    $ sudo vim /etc/hosts
    192.168.5.1 localhost

Lösung 3. Ändern Sie Ihre db-Konfigurationsdatei, um einen Alias ​​anstelle von localhost zu verwenden :

connectionURL="jdbc:postgresql://DB_ALIAS/admin?stringtype=unspecified"
Fügen Sie dann den DB_ALIAS hinzu zu den Hosts des Containers:
$ sudo docker run --add-host DB_ALIAS:192.168.5.1 -it [image] ...