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 dies zuzulassen?
197
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 dies zuzulassen?
Antworten:
Sie können Postgres folgendermaßen ausführen (einen Port zuordnen):
Jetzt haben Sie den Port 5432 Ihres Containers dem Port 5432 Ihres Servers zugeordnet.
-p <host_port>:<container_port>
So ist jetzt Ihr Postgres von Ihrem zugänglichpublic-server-ip:5432
So testen Sie: Führen Sie die Postgres-Datenbank aus (Befehl oben).
Gehen Sie in Ihren Container und erstellen Sie eine Datenbank:
Gehen Sie zu Ihrem lokalen Host (wo Sie ein Tool oder den psql-Client haben).
(Passwort mysecretpassword)
Sie greifen also von Ihrem lokalen Host auf die Datenbank zu (die im Docker auf einem Server ausgeführt wird).
In diesem Beitrag wird es im Detail erklärt.
quelle
ifconfig -u | grep 'inet ' | grep -v 127.0.0.1 | cut -d\ -f2 | head -1
docker run --net=host --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d -p 5432:5432 postgres
Ich habe es geschafft, es unter Linux zum Laufen zu bringen
Führen Sie die Docker-Postgres aus - stellen Sie sicher, dass der Port veröffentlicht ist. Ich verwende Alpine, weil er leicht ist.
sudo docker run --rm -P -p 127.0.0.1:5432:5432 -e POSTGRES_PASSWORD="1234" --name pg postgres:alpine
Greifen Sie mit einem anderen Terminal vom Host aus mit dem postgres uri auf die Datenbank zu
psql postgresql://postgres:1234@localhost:5432/postgres
Ersetzen Sie für Mac-Benutzer psql durch pgcli
quelle
sudo
Ihren Container wirklich nicht zum Ausführen verwenden.Sie können auch über den Docker Exec-Befehl auf Folgendes zugreifen:
Oder
quelle
su postgres
dasIch hatte bereits Postgres auf dem Host-Computer ausgeführt und wollte keine Verbindungen vom Netzwerk zulassen. Daher habe ich eine temporäre Postgres-Instanz im Container ausgeführt und die Datenbank in nur zwei Zeilen erstellt:
quelle
-e POSTGRES_DB=my-db
Folgendes hinzufügen: my-db anstelle von postgres erstellenIch benutze Django mit Postgres in Docker-Containern. Fügen Sie in der Docker-Compose-Datei Folgendes hinzu:
Dadurch wird der zugängliche Port Ihres lokalen Computers hinzugefügt. Für mich selbst habe ich DBeaver damit verbunden. Dadurch werden Portkonflikte zwischen Ihrer App-Anforderung und der lokalen Computeranforderung verhindert. Zuerst erhielt ich die Nachricht, dass der Port 5432 verwendet wird (der von der Django-App stammt), sodass ich nicht über pgAdmin oder DBeaver darauf zugreifen konnte.
quelle
Um eine Verbindung vom lokalen Host herzustellen, müssen Sie '--net host' hinzufügen:
Sie können direkt auf den Server zugreifen, ohne exec von Ihrem lokalen Host aus zu verwenden. Verwenden Sie dazu:
quelle
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 Zurückschalten auf Port 5432 funktioniert alles einwandfrei.
Dies war meine Erfahrung, die ich teilen wollte. Vielleicht kann jemand davon Gebrauch machen.
quelle
/var/lib/mysql
?Ich gehe davon aus, dass Sie die in Ihrem Container vorhandenen Daten jedes Mal anzeigen möchten, wenn Sie von außen eine Verbindung herstellen. Dazu müssen Sie die Daten auf dem Postgres-Bild beibehalten.
Wenn Sie keine dauerhaften Daten haben, müssen Sie alles wiederholen, was Sie beim ersten Mal getan haben.
Die Schritte 3, 5, 6, 7 und 8 beantworten Ihre Frage direkt.
Hier ist die detaillierte Übersicht über den gesamten Prozess, den ich unter Windows 10 Powershell ausgeführt habe (Befehle sind auch unter Linux und MacOS identisch):
Schritt 1 : Starten Sie Powershell im Nicht-Administrator-Modus
Schritt 2 : Postgres Docker Bild herunterladen:
docker pull postgres:latest
Schritt 3 : Starten Sie den Docker-Container im getrennten Modus und behalten Sie die Daten auf dem Postgres-Image bei, indem Sie ein Volume erstellen und an ein Ziel binden
( Hinweis : Standardmäßig wird 5432 als Standardport verwendet, geben Sie ihn jedoch explizit an, um Verbindungsfehler von Clients wie zu verhindern pgadmin, dbeaver usw.)
docker run --name postgres-test -e POSTGRES_PASSWORD=password -p 5432:5432 -v postgres-data:/var/lib/postgresql/data -d postgres:latest
Schritt 4 : Überprüfen Sie den Status der laufenden Container
docker ps -a
Schritt 5 : Gehen Sie im interaktiven Modus in container_name
( Hinweis : Befehle wie ls, pwd usw. können hier ausgeführt werden, wenn Sie während der Installation Linux-Container überprüft haben).
docker exec -it postgres-test psql -U postgres
Schritt 6 : Erstellen Sie Beispieldaten. Zu diesem Zeitpunkt können Sie
psql
auf folgende WeisemitBefehlenspielen:Schritt 7 : Öffnen Sie eine Datenbank-Client-Anwendung wie
pgadmin
oderdbeaver
und geben Sie Folgendes in die Verbindungsfelder ein:Schritt 8 : Geben Sie die Abfrage
select * from test_table
in den Abfrageeditor ein und Sie sollten die Ausgabe sehen können123
quelle
Aus irgendeinem Grund scheint der 5432-Port geschützt zu sein. Ich habe meine Portkonfiguration von
5432:5432
auf geändert5416:5432
und der folgende Befehl hat funktioniert, um von außerhalb des Docker-Containers eine Verbindung zu Ihrer Postgres-Datenbank herzustellen :quelle
postgres
Dienst wahrscheinlich bereits auf Ihrem Host-Computer aus, der bereits an localhost: 5432 gebunden ist, sodass Sie ihn nicht verwenden können. Die Zuordnung eines anderen Host-Ports zum Standardport 5432 im Container ist eine gute Lösung dafür. Alternativ können Sie den Postgres-Dienst auf Ihrem Host beenden, aber möglicherweise wird er für etwas verwendet, das Sie benötigen.Öffnen Sie zuerst das Docker-Image für die Postgres
dann bekommst du das root -
root@868594e88b53:/#
es braucht die Datenbankverbindungquelle
Falls es sich um eine Django-Backend-Anwendung handelt, können Sie so etwas tun.
quelle
Hier gibt es gute Antworten, aber wenn Sie eine Schnittstelle für die Verwaltung von Postgres-Datenbanken wünschen, können Sie pgAdmin auf Ihrem lokalen Computer installieren und über die IP-Adresse und den Postgres-Port (standardmäßig 5432) eine Verbindung zum Remotecomputer herstellen.
quelle
docker ps -a
Um Container-IDs zu erhalten, docker exec -it psql -U -Wquelle
Ich weiß, dass dies spät ist, wenn Sie Docker-Compose wie @Martin verwendet haben
Dies sind die Schnipsel, die mir geholfen haben, eine Verbindung zu psql im Container herzustellen
docker-compose run db bash
root@de96f9358b70:/# psql -h db -U root -d postgres_db
Ich kann nicht kommentieren, weil ich keinen Ruf habe. Hoffe das hilft.
quelle