Stworzyłem obraz ubuntu z nginx, php i postgres.
Chcę połączyć bazę danych postgres w moim bieżącym obrazie z bazą pgadmin
znajdującą się na moim komputerze lokalnym.
Próbowałem użyć inspektora docker, aby spróbować użyć ip obrazu do nawiązania połączenia z moim lokalnym pgadminem, ale bez większego sukcesu. Próbowałem też skonfigurować niektóre porty lokalnie, aby połączenie działało.
postgresql
docker
pgadmin
Rigoxls
źródło
źródło
Odpowiedzi:
To ważne pytanie, nie wiem, dlaczego ludzie uważają, że „nie można odpowiedzieć na to pytanie”.
Oto jak robię to, co próbujesz zrobić:
Pobierz obraz postgres z Docker Hub
docker pull postgres:latest
Uruchom kontener za pomocą poniższego polecenia
docker run -p 5432:5432 postgres
Za pomocą polecenia docker inspect znajdź adres IP
Użyj tego adresu IP, PORT, nazwy użytkownika i hasła, aby połączyć się w PGADMIN
Możesz również wykonać prosty telnet, jak poniżej, aby potwierdzić, czy masz dostęp do kontenera docker postgres:
telnet IP_ADDRESS 5432
źródło
-p 5432:5432
, nie musisz znajdować adresu IP kontenera, możesz użyć adresu IP swojego hosta127.0.0.1
lub po prostulocalhost
Co odniosłem sukces na Windows 10 z uruchomionym dockerem dla Windows 1.12.6 (9655), krok jest taki jak poniżej:
Pobierz najnowsze postgresy
docker pull postgres:latest
uruchom kontener postgres:
docker run -d -e POSTGRES_USER=user -e POSTGRES_PASSWORD=password123 --name db-my -p 5432:5432 --restart=always postgres
Następnie zainstalowano najnowszą wersję pgAdmin4 z witryny internetowej pgadmin
Uruchom pgAdmin 4, utwórz nowy serwer i wprowadź następujący Host: 127.0.0.1 Port: 5432 Nazwa użytkownika: hasło użytkownika: hasło123
źródło
Alternatywnie, można połączyć Postgresa i pgAdmin w jednym
docker-compose
pliku i zaloguj się jako użytkownik[email protected]
, PWD:admin
. Aby dodać serwer Posgres, użyj nazwy hostapostgres
, portu5432
.źródło
docker network ls
, zobaczysz most dla sieci postgres-to-pgadmin (moja to postgres_postgres). Następnie możeszdocker network inspect postgres_postgres
zobaczyć dwa kontenery, każdy z adresem IP / nazwą hosta. Weź ten z Postgres (mój to postgres_db_1), aby pomyślnie połączyć się z pgAdmin.To właśnie zrobiłem
dla postgresów
docker run -p 5432:5432 --name container-postgresdb -e POSTGRES_PASSWORD=admin -d postgres
dla pgadmin
Ciąg połączenia dla pgadmin
To działa dobrze!!!!!
źródło
Unable to connect to server: could not translate host name "host.docker.internal" to address: Try again
W moim przypadku mogłem rozwiązać problem sprawdzając mój obraz postgre za pomocą polecenia
Więc użyłem adresu IP dockera do skonfigurowania połączenia z pgadmin 4 i wszystko było w porządku. Dzięki @Afshin Ghazi
źródło
Jeśli pgAdmin ma być uruchamiany z tym samym hostem / gościem Ubuntu, musisz połączyć kontener postgres, aby można go było rozwiązać za pomocą nazwy.
1. Uruchom kontener postgres:
docker run --name some-postgres -e POSTGRES_PASSWORD=postgres -d postgres
2. Uruchom kontener pgAdmin:
docker run -p 80:80 --link some-postgres -e "[email protected]" -e "PGADMIN_DEFAULT_PASSWORD=postgres" -d dpage/pgadmin4
3. Teraz podczas dodawania nowego serwera w aplikacji internetowej phAdmin użyj
some-postgres
jako nazwy serweraZwróć uwagę,
--link some-postgres
kiedy uruchamialiśmy pgAdmin. To polecenie sprawia, że kontener postgres jest widoczny dla kontenera pgAdmin.źródło
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.
również nie miałem szczęścia przy używaniu--link
mojego kontenera pgadmin do komunikowania się z moim kontenerem postgres. Jednak mogę uzyskać dostęp do postgres z lokalnej instalacji pgadmin.Dodałem to do pliku Docker yaml, aby uzyskać bazę danych i pgAdmin:
Nazwa użytkownika postgres to alphaone, a hasło to xxxxxxxxxxx.
Zrób a,
docker ps
aby uzyskać identyfikator kontenera, a następniedocker inspect <dockerContainerId> | grep IPAddress
na przykład:
docker inspect 2f50fabe8a87 | grep IPAddress
Wstaw adres IP do pgAdmin i poświadczenia bazy danych używane w dockerze:
źródło
localhost
nie działało.Jeśli sprawdziłeś, że PostgreSQL działa i możesz się tam połączyć z lokalną kopią PgAdmin ...
Odpowiedź jest prosta: użyj
host.docker.internal
istead oflocalhost
dla PgAdmin działającego wewnątrz Dockeraźródło
W moim przypadku miałem kontener PostgreSQL, więc nie zmieniłem kontenera ani nie stworzyłem podejścia docker-compose, potrzebowałem pgadming po kilku miesiącach, aby zainstalować PostgreSQL, więc takie jest moje podejście:
docker inspect my_container_id_postgreSQL
Sieć przypisana do PostgreSQL to:
"Sieci": {"docker_default": {"IPAddress": "172.18.0.2", ...}}
Uruchomiłem PGADMIN z
--network
poleceniem.docker run -p 85:80 --network docker_default -e '[email protected]' -e 'PGADMIN_DEFAULT_PASSWORD = SuperSecret' -d dpage / pgadmin4
Wstaw adres IP do pgAdmin i poświadczenia bazy danych używane w dockerze.
Mam nadzieję, że komuś się to przyda. Pozdrowienia.
źródło
Aby lub znaleźć swój adres IP kontenera, użyj następującego polecenia
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id
Odniesienie: Jak uzyskać adres IP kontenera Dockera od hosta
źródło
Musisz udostępnić port postgres w kontenerze do lokalnego systemu. Robisz to, uruchamiając kontener w ten sposób:
docker run -p 5432:5432 <name/id of container>
podczas łączenia się z klientem GUI lub CLI upewnij się, że używasz adresu IP, a nie localhost, nawet jeśli twój adres IP jest adresem IP lokalnego hosta.
docker ps
poda adres IP, na którym znajduje się kontener postgres.źródło
Po dwóch dniach stawiania czoła temu problemowi udało mi się go rozwiązać.
na rozwiązanie tego problemu odpowiedzieli już ludzie, tacy jak sprawdź
docker inspect CONTAINER_ID
ale podczas uruchamiania tej komendy dostałem-wiele dzienników, takich jak ustawienia komputera Config Ustawienia sieci itd. Więc mam mylić który IPAddress dodać w pgAdmin związku bo próbowałem 0.0.0.0 i konfiguracji, host, networkSettings inny -2 IPAddress w logi, ale w końcu działa po wielu próbach.
działa z jakim adresem IP, musimy dodać ten sieciowy adres IP (który utworzyliśmy, aby połączyć postgres i pgAdmin .)
jak w moim przypadku, gdy biegam: -
więc musimy dodać NetworkSettings -> Network -> Postgres (moja utworzona sieć) -> IPAddress czyli "IPAddress": "192.168.16.2".
Po dodaniu tego adresu IP będzie działać.
Mam nadzieję, że to pomoże.
źródło
Aby to zrobić, możesz również utworzyć sieć mostka Docker.
$ 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
Otwórz http: // localhost: 8000 /
Nazwa / adres hosta użyty powyżej to nazwa kontenera Postgres podana przez
--name pg
źródło
Aby znaleźć właściwy adres IP dla swojego kontenera, wykonaj następujące polecenia:
Sprawdź identyfikator kontenera:
Aby sprawdzić poprawny adres IP kontenera:
Konfiguracja zarówno PostgreSQL, jak i PgAdmin z Dockerem jest prosta, jeśli nie jest poprawna, polecam powtórzenie konfiguracji od zera, jeśli problem jest głębszy.
Oto skrypt, który opracowałem, aby rozwiązać ten problem. script-sh / install-docker-postgres-and-pgadmin
źródło
Dla macOS adresy IP
postgres
ipgadmin4
różnią się od tych, któredocker inspect
zapewnia. RodzajSpójrz na nazwę serwera po lewej stronie. To jest
default
domyślne.docker-machine ip default
IP będzie trzeba użyć dla obu ,pgadmin4
w przeglądarce orazpostgres
wpgadmin4
ustawieniach.źródło
Rozwiązaniem, które wypróbowałem i pracowałem dla mnie, było utworzenie pliku redagowania dockera, w którym jako usługi dołączyłem postgress i pgadmin. Więcej szczegółów: Łączenie pgadmin z postgres w dockerze
źródło