Docker Postgres Pgadmin lokale Verbindung


94

Ich habe ein Ubuntu-Bild mit Nginx, PHP und Postgres erstellt.

Ich möchte die Postgres-Datenbank in meinem aktuellen Image mit pgadminder auf meinem lokalen Computer befindlichen verbinden.

Ich habe versucht, mit Docker Inspector zu versuchen, mithilfe der Image-IP eine Verbindung mit meinem lokalen pgadmin herzustellen, aber ohne großen Erfolg. Ich habe auch versucht, einige lokale Ports zu konfigurieren, damit die Verbindung funktioniert.


Sie sagen nicht, ob PostgreSQL auf externe Verbindungen wartet (überprüfen Sie Ihre Konfigurationsdateien) oder ob dieser Port auf dem lokalen Computer geöffnet erscheint.
Richard Huxton

1
Es scheint nicht möglich zu sein, diese Frage mit so wenig Informationen zu beantworten
cthulhu

Antworten:


90

Es ist eine gültige Frage, die nicht weiß, warum die Leute das Gefühl haben, "diese Frage nicht zu beantworten".

Also, hier ist, wie ich mache, was du versuchst zu tun:

  1. Ziehen Sie das Postgres-Bild vom Docker Hub

    docker pull postgres:latest

  2. Führen Sie den Container mit dem folgenden Befehl aus

    docker run -p 5432:5432 postgres

  3. Verwenden Sie den Inspektorbefehl von Docker, um die IP zu ermitteln

  4. Verwenden Sie diese IP, PORT, Benutzername und Passwort, um eine Verbindung in PGADMIN herzustellen

  5. Sie können auch ein einfaches Telnet wie unten ausführen, um zu bestätigen, ob Sie auf den Docker-Postgres-Container zugreifen können:

    telnet IP_ADDRESS 5432


15
Wenn Sie den Port damit veröffentlichen, müssen -p 5432:5432Sie die IP des Containers nicht finden. Sie können Ihre Host-IP verwenden oder 127.0.0.1oder nurlocalhost
Davos

Die Absicht des Beitrags ist gültig, aber es ist kein qualitativ hochwertiger Beitrag für SE. Zu Beginn wird keine eigentliche "Frage" gestellt. Darüber hinaus gibt es keine Hinweise darauf, wie sie den Prozess ausprobiert haben oder welche Fehler sie dabei erhalten haben. Trotzdem denke ich, dass Sie gut reagiert haben.
duct_tape_coder

2
Diese Antwort ist nützlich für mich, daher ist es eine gültige Frage.
Todd

Ich habe -p 5432: 5432 verwendet, um den Container meinem Host zuzuordnen, erhalte aber immer noch einen Verbindungsfehler. Ich habe versucht, die IPAddress zu verwenden, die ich von Docker Inspect erhalten habe, und es funktioniert.
Ginad

48

Was ich unter Windows 10 erfolgreich gemacht habe, wenn Docker für Windows 1.12.6 (9655) ausgeführt wird, ist der folgende Schritt:

  1. Ziehen Sie die neuesten Postgres

    docker pull postgres:latest

  2. Führen Sie den Postgres-Container aus:

    docker run -d -e POSTGRES_USER=user -e POSTGRES_PASSWORD=password123 --name db-my -p 5432:5432 --restart=always postgres

  3. Installieren Sie dann die neueste Version von pgAdmin4 von der pgadmin-Website

  4. Führen Sie pgAdmin 4 aus, erstellen Sie einen neuen Server und geben Sie Folgendes ein: Host: 127.0.0.1 Port: 5432 Benutzername: Benutzerkennwort: Kennwort123

  5. Dann ist alles in Ordnung, verbinden Sie sich mit Docker Postgres Instanz Erfolg.

40

Alternativ können Sie Postgres und Pgadmin in einer docker-composeDatei kombinieren und sich als Benutzer anmelden pgadmin4@pgadmin.org, pwd : admin. Verwenden Sie zum Hinzufügen des Posgres-Servers den Hostnamen postgresport 5432.

version: '3'
services:
  postgres:
    image: postgres
    hostname: postgres
    ports:
      - "6543:5432"
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
      POSTGRES_DB: TEST_SM
    volumes:
      - postgres-data:/var/lib/postgresql/data
    restart: unless-stopped

  pgadmin:
    image: dpage/pgadmin4
    depends_on:
      - postgres
    ports:
      - "5555:80"
    environment:
      PGADMIN_DEFAULT_EMAIL: pgadmin4@pgadmin.org
      PGADMIN_DEFAULT_PASSWORD: admin
    restart: unless-stopped

volumes:
  postgres-data:

3
Ich erhalte die Meldung "Hostname" postgres "konnte nicht in folgende Adresse übersetzt werden: Knotenname oder Servname angegeben oder nicht bekannt".
Enrique Ortiz Casillas

1
Hostname "postgres" konnte nicht in Adresse übersetzt werden: Name wird nicht aufgelöst
Proxy

1
Wenn Sie dies docker network lstun, sehen Sie eine Brücke für das Postgres-to-Pgadmin-Netzwerk (meine ist postgres_postgres). Anschließend können Sie docker network inspect postgres_postgreszwei Container mit jeweils einem IP- / Hostnamen anzeigen. Nehmen Sie die von Postgres (meine ist postgres_db_1), um eine erfolgreiche Verbindung von pgAdmin herzustellen.
Nil

25

Das habe ich getan

für postgres

docker run -p 5432:5432  --name container-postgresdb -e POSTGRES_PASSWORD=admin -d postgres

für pgadmin

docker run -p 5050:80  -e "PGADMIN_DEFAULT_EMAIL=name@example.com" -e "PGADMIN_DEFAULT_PASSWORD=admin"  -d dpage/pgadmin4

Verbindungszeichenfolge für pgadmin

host: host.docker.internal
database: postgres
user: postgres
password: admin

Es funktioniert gut!!!!!


5
Unable to connect to server: could not translate host name "host.docker.internal" to address: Try again
duct_tape_coder

2
Ich habe diesen Ansatz auch verwendet, um sowohl Postgres als auch pgAdmin im Docker zu erstellen. Was für mich als Eingabewert funktioniert hat, war die Antwort von @SolidSnake - stackoverflow.com/a/58224344/4288961 > Docker inspect CONTAINER_ID | grep IPAddress. und verwendet dieses Ergebnis IP-Adresse als Host
Prusdrum

Genial!. Sehr hilfreich. Ich brauchte nur den Wert 'host.docker.internal'
Hernán Acosta

17

Wenn pgAdmin mit demselben Ubuntu-Host / Gast ausgeführt werden soll, müssen Sie den Postgres-Container verknüpfen, damit er durch einen Namen aufgelöst werden kann.

1. Führen Sie einen Postgres-Container aus:

docker run --name some-postgres -e POSTGRES_PASSWORD=postgres -d postgres

2. Führen Sie den pgAdmin-Container aus:

docker run -p 80:80 --link some-postgres -e "PGADMIN_DEFAULT_EMAIL=email@domain.com" -e "PGADMIN_DEFAULT_PASSWORD=postgres" -d dpage/pgadmin4

3. Wenn Sie jetzt einen neuen Server in der phAdmin-Webanwendung hinzufügen, verwenden Sie diesen some-postgresals Servernamen

Beachten Sie, --link some-postgreswann wir den pgAdmin aufgerufen haben. Dieser Befehl macht den Postgres-Container für den pgAdmin-Container sichtbar.


1
Ich kann mit psq eine Verbindung zum Server herstellen und erhalte ein Protokoll bei der pgadmin-Schnittstelle. Aber welches Netzwerk / welchen Port verwende ich, wenn ich über die pgadmin-Schnittstelle eine Verbindung zum Postgres-Server herstelle?
Tom

Bemerkenswert in den Docker-Dokumenten ( docs.docker.com/network/links ). Warning: The --link flag is a legacy feature of Docker. It may eventually be removed. Unless you absolutely need to continue using it, we recommend that you use user-defined networks to facilitate communication between two containers instead of using --link.Ich hatte auch kein Glück --linkdamit, meinen pgadmin-Container dazu zu bringen, mit meinem Postgres-Container zu sprechen. Ich kann jedoch über eine lokale Installation von pgadmin auf die Postgres zugreifen.
duct_tape_coder

17

In meinem Fall könnte ich das Problem lösen, mein Postgre-Bild durch Befehl zu überprüfen

docker inspect CONTAINER_ID  | grep IPAddress.

Also habe ich die Docker-IP-Adresse verwendet, um meine pgadmin 4-Verbindung zu konfigurieren, und alles war in Ordnung. Vielen Dank an @Afshin Ghazi


Das funktioniert bei mir.
Kalpesh Tawde

11

Ich habe dies in die Docker-Yaml-Datei aufgenommen, um die Datenbank und pgAdmin zu erhalten:

database:
    image: postgres:10.4-alpine
    container_name: kafka-nodejs-example-database
    environment:
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
    expose:
      - "5432"
    ports:
      - 8000:5432
    volumes:
      - ./services/database/schema.sql:/docker-entrypoint-initdb.d/1-schema.sql
      - ./services/database/seed.sql:/docker-entrypoint-initdb.d/2-seed.sql
  pgadmin:
    image: dpage/pgadmin4
    ports:
      - 5454:5454/tcp
    environment:
      - PGADMIN_DEFAULT_EMAIL=admin@mydomain.com
      - PGADMIN_DEFAULT_PASSWORD=postgres
      - PGADMIN_LISTEN_PORT=5454

Der Postgres-Benutzername lautet alphaone und das Passwort lautet xxxxxxxxxxx.

Führen Sie a aus docker ps, um die Container-ID abzurufen, und danndocker inspect <dockerContainerId> | grep IPAddress

z.B: docker inspect 2f50fabe8a87 | grep IPAddress

Fügen Sie die IP-Adresse in pgAdmin und die im Docker verwendeten Datenbankanmeldeinformationen ein:

pgAdmin


Das hat geholfen. Ich musste die richtige IP-Adresse aus dem mit Docker Postgres verknüpften Container ermitteln, um die Serverkonfiguration im Docker PgAdmin-Portal wie oben gezeigt hinzuzufügen. Putten localhosthat nicht funktioniert.
Andrew Lobban

5

In meinem Fall hatte ich einen PostgreSQL-Container, also habe ich weder meinen Container geändert noch einen Docker-Compose-Ansatz erstellt. Nach einigen Monaten musste pgadming ausgeführt werden, um PostgreSQL zu installieren. Dies ist also mein Ansatz:

  1. docker inspect my_container_id_postgreSQL
  2. Das PostgreSQL zugewiesene Netzwerk war:

    "Netzwerke": {"docker_default": {"IPAddress": "172.18.0.2", ...}}

  3. Lief mein PGADMIN mit --networkBefehl.

    Docker run -p 85:80 --net docker_default -e 'PGADMIN_DEFAULT_EMAIL=user@domain.com' -e 'PGADMIN_DEFAULT_PASSWORD = SuperSecret' -d dpage / pgadmin4

  4. Geben Sie die IP-Adresse in pgAdmin und die im Docker verwendeten Datenbankanmeldeinformationen ein.

Ich hoffe, dass dies für jemanden nützlich sein kann. Grüße.


4

Sie müssen den Postgres-Port im Container Ihrem lokalen System zur Verfügung stellen. Sie tun dies, indem Sie Ihren Container wie folgt ausführen:

docker run -p 5432:5432 <name/id of container>

Stellen Sie bei der Verbindung mit Ihrem GUI-Client oder Ihrer CLI sicher, dass Sie die IP-Adresse und nicht localhost verwenden, auch wenn Ihre IP-Adresse die IP-Adresse von localhost ist.

docker ps würde Ihnen die IP-Adresse geben, auf der sich Ihr Postgres-Container befindet.



4

Wenn Sie überprüft haben, dass PostgreSQL ausgeführt wird und Sie dort eine Verbindung mit einer lokalen Kopie von PgAdmin herstellen können ...

Die Antwort ist einfach: Verwenden Sie host.docker.internalistead of localhostfür den PgAdmin, der im Docker ausgeführt wird

Verwenden Sie <code> host.docker.internal </ code> anstelle von <code> localhost </ code>


2

Nachdem ich zwei Tage lang mit diesem Problem konfrontiert war, konnte ich dieses Problem beheben.

Die Lösung dieses Problems wird bereits von Leuten wie do inspect beantwortet

docker inspect CONTAINER_ID

Aber während ich diesen Befehl ausführte, bekam ich viele Protokolle wie Host Config Config Network Settings usw., so dass ich verwirrt war, welche IPAddress in der pgAdmin- Verbindung hinzugefügt werden sollte , weil ich 0.0.0.0 und config, host, networkSettings verschiedene -2 IPAddress in der protokolliert, aber schließlich funktioniert es, nachdem ich viel versucht habe.

es funktioniert mit welcher IP, wir müssen diese Netzwerk-IP-Adresse hinzufügen (die wir erstellt haben, um die Postgres und pgAdmin zu verbinden .)

wie in meinem Fall, wenn ich renne: -

Docker inspizieren postgres_container

 "NetworkSettings": {
        "Bridge": "",
        "SandboxID": "sdffsffsfsfsfsf123232e2r3pru3ouoyoyuosyvo8769696796",
        "HairpinMode": false,
        "LinkLocalIPv6Address": "",
        "LinkLocalIPv6PrefixLen": 0,
        "Ports": {
            "5432/tcp": [
                {
                    "HostIp": "0.0.0.0",
                    "HostPort": "5432"
                }
            ]
        },
        "SandboxKey": "/var/run/docker/231231Ad132",
        "SecondaryIPAddresses": null,
        "SecondaryIPv6Addresses": null,
        "EndpointID": "",
        "Gateway": "",
        "GlobalIPv6Address": "",
        "GlobalIPv6PrefixLen": 0,
        "IPAddress": "",
        "IPPrefixLen": 0,
        "IPv6Gateway": "",
        "MacAddress": "",
        "Networks": {
            "postgres": {
                "IPAMConfig": null,
                "Links": null,
                "Aliases": [
                    "postgres",
                    "0e2j3bn2m42"
                ],
                "NetworkID": "35rhlhl3l53l5hlh3523233k3k4k22l3hk2k4",
                "EndpointID":"b3424n43k52o2i4n235k1k4l2l4hj234f14n2",
                "Gateway": "192.168.16.1",
                "IPAddress": "192.168.16.2",
                "IPPrefixLen": 20,
                "IPv6Gateway": "",

Daher müssen wir die NetworkSettings -> Network -> Postgres (mein erstelltes Netzwerk) -> IPAddress hinzufügen, dh "IPAddress": "192.168.16.2".

Nach dem Hinzufügen dieser IP wird es funktionieren.

Ich hoffe es wird helfen.


1

Führen Sie die folgenden Befehle aus, um die richtige IP für Ihren Container zu finden:

Überprüfen Sie die Container-ID:

docker ps

So überprüfen Sie die korrekte IP Ihres Containers:

docker inspect <ID_CONTAINER> | grep "IPAddress"

Die Konfiguration von PostgreSQL und PgAdmin mit Docker ist einfach, wenn nicht richtig. Ich empfehle, die Konfiguration von Grund auf neu zu erstellen, wenn Ihr Problem tiefer liegt.

Hier ist ein Skript, das ich entwickelt habe, um dieses Problem zu lösen. script-sh / install-docker-postgres-and-pgadmin


1

Dazu können Sie auch ein Docker-Bridge-Netzwerk erstellen.

$ docker network create pgnet
a0ae44aaf6f806fc37302e4c603b4828c4edb8d487fd9cd90e2fb19ae1d5c65f

$ docker run --detach \
    --name pg \
    --network pgnet \
    --publish 5432:5432 \
    --restart always \
    --env POSTGRES_PASSWORD=pg123 \
    --volume ${PWD}/data:/var/lib/postgresql/data \
    postgres:12.1
b60611e43727dabe483c1f08fdf74961b886ce05b432a10a0625bd1b6db87899

$ docker run --detach \
    --name pgadm \
    --network pgnet \
    --publish 8000:80 \
    --volume ${PWD}/pgadmin:/var/lib/pgadmin \
    --env PGADMIN_DEFAULT_EMAIL=user@domain.com \
    --env PGADMIN_DEFAULT_PASSWORD=pgadm123 \
    dpage/pgadmin4:4.20
27f9ce1c1c4c383ee1507f4e2d88f6ef33d4fcf5b209a8a03b87519f90d56312

Öffnen Sie http: // localhost: 8000 /

  1. Klicken Sie auf Neuen Server hinzufügen
  2. Erstellen - Server
    1. Name: db
    2. Hostname / Adresse: pg
    3. Benutzername: postgres
    4. Passwort: pg123
  3. sparen

Der oben verwendete Hostname / Adresse ist der Name des Postgres-Containers von --name pg


1

Für macOS IPs von postgresund pgadmin4unterscheiden sich von denen, docker inspectdie zur Verfügung gestellt werden. Art

docker-machine ls

Sehen Sie sich links den Namen des Servers an. Es ist defaultstandardmäßig.

docker-machine ip defaultwird IP müssen Sie verwenden beide , pgadmin4in Browser und postgresin pgadmin4Einstellungen.


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.