Ich habe ein Ubuntu-Bild mit Nginx, PHP und Postgres erstellt.
Ich möchte die Postgres-Datenbank in meinem aktuellen Image mit pgadmin
der 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.
postgresql
docker
pgadmin
Rigoxls
quelle
quelle
Antworten:
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:
Ziehen Sie das Postgres-Bild vom Docker Hub
docker pull postgres:latest
Führen Sie den Container mit dem folgenden Befehl aus
docker run -p 5432:5432 postgres
Verwenden Sie den Inspektorbefehl von Docker, um die IP zu ermitteln
Verwenden Sie diese IP, PORT, Benutzername und Passwort, um eine Verbindung in PGADMIN herzustellen
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
quelle
-p 5432:5432
Sie die IP des Containers nicht finden. Sie können Ihre Host-IP verwenden oder127.0.0.1
oder nurlocalhost
Was ich unter Windows 10 erfolgreich gemacht habe, wenn Docker für Windows 1.12.6 (9655) ausgeführt wird, ist der folgende Schritt:
Ziehen Sie die neuesten Postgres
docker pull postgres:latest
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
Installieren Sie dann die neueste Version von pgAdmin4 von der pgadmin-Website
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
quelle
Alternativ können Sie Postgres und Pgadmin in einer
docker-compose
Datei kombinieren und sich als Benutzer anmelden[email protected]
, pwd :admin
. Verwenden Sie zum Hinzufügen des Posgres-Servers den Hostnamenpostgres
port5432
.quelle
docker network ls
tun, sehen Sie eine Brücke für das Postgres-to-Pgadmin-Netzwerk (meine ist postgres_postgres). Anschließend können Siedocker network inspect postgres_postgres
zwei Container mit jeweils einem IP- / Hostnamen anzeigen. Nehmen Sie die von Postgres (meine ist postgres_db_1), um eine erfolgreiche Verbindung von pgAdmin herzustellen.Das habe ich getan
für postgres
docker run -p 5432:5432 --name container-postgresdb -e POSTGRES_PASSWORD=admin -d postgres
für pgadmin
Verbindungszeichenfolge für pgadmin
Es funktioniert gut!!!!!
quelle
Unable to connect to server: could not translate host name "host.docker.internal" to address: Try again
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 "[email protected]" -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-postgres
als ServernamenBeachten Sie,
--link some-postgres
wann wir den pgAdmin aufgerufen haben. Dieser Befehl macht den Postgres-Container für den pgAdmin-Container sichtbar.quelle
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--link
damit, 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.In meinem Fall könnte ich das Problem lösen, mein Postgre-Bild durch Befehl zu überprüfen
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
quelle
Ich habe dies in die Docker-Yaml-Datei aufgenommen, um die Datenbank und pgAdmin zu erhalten:
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:
quelle
localhost
hat nicht funktioniert.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:
docker inspect my_container_id_postgreSQL
Das PostgreSQL zugewiesene Netzwerk war:
"Netzwerke": {"docker_default": {"IPAddress": "172.18.0.2", ...}}
Lief mein PGADMIN mit
--network
Befehl.Docker run -p 85:80 --net docker_default -e '[email protected]' -e 'PGADMIN_DEFAULT_PASSWORD = SuperSecret' -d dpage / pgadmin4
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.
quelle
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.quelle
Verwenden Sie den folgenden Befehl, um Ihre IP-Adresse zu bestellen oder zu ermitteln
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id
Referenz: So erhalten Sie die IP-Adresse eines Docker-Containers vom Host
quelle
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.internal
istead oflocalhost
für den PgAdmin, der im Docker ausgeführt wirdquelle
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: -
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.
quelle
Führen Sie die folgenden Befehle aus, um die richtige IP für Ihren Container zu finden:
Überprüfen Sie die Container-ID:
So überprüfen Sie die korrekte IP Ihres Containers:
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
quelle
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 [email protected] \ --env PGADMIN_DEFAULT_PASSWORD=pgadm123 \ dpage/pgadmin4:4.20 27f9ce1c1c4c383ee1507f4e2d88f6ef33d4fcf5b209a8a03b87519f90d56312
Öffnen Sie http: // localhost: 8000 /
Der oben verwendete Hostname / Adresse ist der Name des Postgres-Containers von
--name pg
quelle
Für macOS IPs von
postgres
undpgadmin4
unterscheiden sich von denen,docker inspect
die zur Verfügung gestellt werden. ArtSehen Sie sich links den Namen des Servers an. Es ist
default
standardmäßig.docker-machine ip default
wird IP müssen Sie verwenden beide ,pgadmin4
in Browser undpostgres
inpgadmin4
Einstellungen.quelle
Die Lösung, die ich für mich ausprobiert und gearbeitet habe, bestand darin, eine Docker-Compose-Datei zu erstellen, in der postgress und pgadmin als Dienste enthalten waren. Weitere Informationen: Verbinden von pgadmin mit postgres im Docker
quelle