it-swarm.com.de

Verbindung zu Postgresql in einem Docker-Container von außen

Ich habe Postgresql auf einem Server in einem Docker-Container. Wie kann ich von außen, dh von meinem lokalen Computer aus, eine Verbindung herstellen? Welche Einstellung sollte ich anwenden, um das zuzulassen?

102
Sojo

Sie können Postgres auf diese Weise ausführen (einen Hafen zuordnen):

docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d -p 5432:5432 postgres

Jetzt haben Sie den Port 5432 Ihres Containers dem Port 5432 Ihres Servers zugeordnet. -p <Host_port>:<container_port>. Jetzt sind Ihre Postgres von Ihrem public-server-ip:5432 aus erreichbar.

Zum Testen: Führen Sie die Postgres-Datenbank aus (Befehl oben).

docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                     NAMES
05b3a3471f6f        postgres            "/docker-entrypoint.s"   1 seconds ago       Up 1 seconds        0.0.0.0:5432->5432/tcp    some-postgres

Gehen Sie in Ihren Container und erstellen Sie eine Datenbank:

docker exec -it 05b3a3471f6f bash
[email protected]:/# psql -U postgres
postgres-# CREATE DATABASE mytest;
postgres-# \q

Gehen Sie zu Ihrem localhost (wo Sie ein Tool oder den psql-Client haben).

psql -h public-ip-server -p 5432 -U postgres

(Passwort mysecretpassword)

postgres=# \l

                             List of databases
   Name    |  Owner   | Encoding |  Collate   |   Ctype    |   Access privileges
-----------+----------+----------+------------+------------+-----------------------
 mytest    | postgres | UTF8     | en_US.utf8 | en_US.utf8 |
 postgres  | postgres | UTF8     | en_US.utf8 | en_US.utf8 |
 template0 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres   

Sie greifen also von Ihrem localhost auf die Datenbank zu (die auf einem Server im Docker läuft).

In diesem Beitrag wird es ausführlich erläutert.

211
lvthillo

Ich habe es geschafft, es unter Linux laufen zu lassen

  • 1 Führen Sie zuerst die Docker-Postgres aus, stellen Sie sicher, dass der Port veröffentlicht wird.

    Sudo docker run --rm -P -p 127.0.0.1:5432:5432 -e POSTGRES_PASSWORD="1234" --name pg postgres:Alpine 

  • 2 Verwenden Sie ein anderes Terminal, und greifen Sie vom Host aus mit dem Postgres-URI auf die Datenbank zu

    psql postgresql://postgres:[email protected]:5432/postgres

ersetzen Sie für Mac-Benutzer psql durch pgcli

16
Thomas Webber

Ich hatte bereits Postgres auf dem Host-Computer ausgeführt und wollte keine Verbindungen vom Netzwerk aus zulassen. Deshalb habe ich eine temporäre Postgres-Instanz in Container ausgeführt und die Datenbank in nur zwei Zeilen erstellt:

# Run PostgreSQL
docker run --name postgres-container -e POSTGRES_PASSWORD=password -it -p 5433:5432 postgres

# Create database
docker exec -it postgres-container createdb -U postgres my-db
11
Eugene

Sie können auch über den Docker-Exec-Befehl zugreifen.

$ docker exec -it postgres-container bash

# su postgres

$ psql
11
SuperNova

Ich benutze Django mit Postgres in Docker-Containern. Fügen Sie in der Docker-Compose-Datei Folgendes hinzu:

db:
    image: postgres:10-Alpine
    environment:
        - POSTGRES_DB=app
        - POSTGRES_USER=postgres
        - POSTGRES_PASSWORD=supersecretpassword
    **ports:
        - "6543:5432"**

dadurch wird der von Ihrem lokalen Computer zugängliche Port hinzugefügt. Für mich selbst habe ich DBeaver damit verbunden. Auf diese Weise werden Portkonflikte zwischen Ihrer App-Anfrage und der lokalen Computeranfrage verhindert. Zuerst erhielt ich die Meldung, dass der Port 5432 (von der Django-App) verwendet wird, sodass ich mit pgAdmin oder DBeaver nicht darauf zugreifen konnte.

2
omeraiman

Um sich vom localhost aus zu verbinden, müssen Sie '--net Host' hinzufügen:

docker run --name some-postgres --net Host -e POSTGRES_PASSWORD=mysecretpassword -d -p 5432:5432 postgres

Sie können direkt auf den Server zugreifen, ohne exec von Ihrem localhost zu verwenden.

psql -h localhost -p 5432 -U postgres
1
user2627846

Ich habe versucht, eine Verbindung von Localhost (Mac) zu einem Postgres-Container herzustellen. Ich habe den Port in der Docker-Compose-Datei von 5432 auf 3306 geändert und den Container gestartet. Keine Ahnung, warum ich es getan habe: |

Dann habe ich versucht, über PSequel und Adminer eine Verbindung zu Postgres herzustellen und die Verbindung konnte nicht hergestellt werden.

Nach dem Umschalten auf Port 5432 funktioniert alles einwandfrei.

  db:
    image: postgres
    ports:
      - 5432:5432
    restart: always
    volumes:
      - "db_sql:/var/lib/mysql"
    environment:
      POSTGRES_USER: root
      POSTGRES_PASSWORD: password
      POSTGRES_DB: postgres_db

Dies war meine Erfahrung, die ich teilen wollte. Vielleicht kann jemand davon Gebrauch machen.

1
Martin

Öffnen Sie zunächst das Docker-Image für die Postgres

docker exec -it <container_name>

dann erhalten Sie das Wurzelverzeichnis --[email protected]:/#it benötigt die Datenbankverbindung 

psql postgresql://<tablename>:<databasepassword>@postgres:5432/<database>
0
ashutosh gupta

docker ps -a, um Container-IDs abzurufen, und dann docker exec -it psql -U -W

0
Afshin Ghazi

Falls es sich um eine Django-Backend-Anwendung handelt, können Sie so etwas tun.

docker exec -it container_id python manage.py dbshell
0
SuperNova

Hier gibt es gute Antworten. Wenn Sie jedoch eine Schnittstelle für die Postgres-Datenbankverwaltung haben möchten, können Sie pgAdmin auf Ihrem lokalen Computer installieren und über die IP-Adresse und den Postgres-Anschluss (standardmäßig 5432) eine Verbindung zum Remote-Computer herstellen.

0
CageE

Aus irgendeinem Grund scheint der Port 5432 geschützt zu sein. Ich habe meine Portkonfiguration von 5432:5432 in 5416:5432 geändert und der folgende Befehl hat funktioniert, um von außerhalb des Docker-Containers eine Verbindung zu Ihrer postgres-Datenbank herzustellen :

psql -h localhost -p 5416 -U <my-user> -d <my-database>
0
Marc Pe-Pe