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?
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.
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
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
Sie können auch über den Docker-Exec-Befehl zugreifen.
$ docker exec -it postgres-container bash
# su postgres
$ psql
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.
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
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.
Ö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>
docker ps -a
, um Container-IDs abzurufen, und dann docker exec -it psql -U -W
Falls es sich um eine Django-Backend-Anwendung handelt, können Sie so etwas tun.
docker exec -it container_id python manage.py dbshell
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.
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>