He creado una imagen de ubuntu con nginx, php y postgres.
Quiero conectar la base de datos de postgres en mi imagen actual pgadmin
ubicada en mi máquina local.
Intenté usar el inspector de docker para intentar usar la ip de la imagen para hacer una conexión con mi pgadmin local, pero sin mucho éxito. También intenté configurar algunos puertos en local para que la conexión funcione.
postgresql
docker
pgadmin
Rigoxls
fuente
fuente
Respuestas:
Es una pregunta válida, no sé por qué la gente siente que "no parece posible responder a esa pregunta".
Entonces, así es como hago lo que estás tratando de hacer:
Extraiga la imagen de postgres de Docker Hub
docker pull postgres:latest
Ejecute el contenedor usando el siguiente comando
docker run -p 5432:5432 postgres
Usando el comando de inspección de Docker, encuentre la IP
Use esa IP, PUERTO, nombre de usuario y contraseña para conectarse en PGADMIN
También puede hacer un telnet simple como a continuación para confirmar si puede acceder al contenedor de docker postgres:
telnet IP_ADDRESS 5432
fuente
-p 5432:5432
entonces no necesita encontrar la IP del contenedor, puede usar su IP de host,127.0.0.1
o simplementelocalhost
Lo que hice con éxito en Windows 10 ejecutando Docker para Windows 1.12.6 (9655), el paso es el siguiente:
Extraiga los últimos postgres
docker pull postgres:latest
ejecuta el contenedor de postgres:
docker run -d -e POSTGRES_USER=user -e POSTGRES_PASSWORD=password123 --name db-my -p 5432:5432 --restart=always postgres
Luego instaló la última versión de pgAdmin4 del sitio web pgadmin
Ejecute pgAdmin 4 para crear un nuevo servidor e introduzca el siguiente Host: 127.0.0.1 Puerto: 5432 Nombre de usuario: contraseña de usuario: contraseña123
fuente
Como alternativa, puede combinar Postgres y PgAdmin en un solo
docker-compose
archivo, y está registrado como usuario[email protected]
, contraseña:admin
. Para agregar el servidor Posgres, use hostnamepostgres
, port5432
.fuente
docker network ls
, verá un puente para la red postgres-to-pgadmin (el mío es postgres_postgres). Luego, puededocker network inspect postgres_postgres
ver dos contenedores, cada uno con una ip / nombre de host. Tome el de Postgres (el mío es postgres_db_1) para conectarse correctamente desde pgAdmin.Esto es lo que hice
para postgres
docker run -p 5432:5432 --name container-postgresdb -e POSTGRES_PASSWORD=admin -d postgres
para pgadmin
Cadena de conexión para pgadmin
¡¡¡¡¡Funciona bien!!!!!
fuente
Unable to connect to server: could not translate host name "host.docker.internal" to address: Try again
En mi caso pude resolver el problema inspeccionando mi imagen postgre a través del comando
Entonces, usé la dirección IP de la ventana acoplable para configurar mi conexión pgadmin 4 y todo estuvo bien. Gracias a @Afshin Ghazi
fuente
Si pgAdmin está destinado a ejecutarse con el mismo host / invitado de Ubuntu, entonces debe vincular el contenedor de postgres, para que pueda resolverse por un nombre.
1. Ejecute un contenedor de postgres:
docker run --name some-postgres -e POSTGRES_PASSWORD=postgres -d postgres
2. Ejecute el contenedor pgAdmin:
docker run -p 80:80 --link some-postgres -e "[email protected]" -e "PGADMIN_DEFAULT_PASSWORD=postgres" -d dpage/pgadmin4
3. Ahora, cuando agregue un nuevo servidor en la aplicación web phAdmin, use
some-postgres
como nombre de servidorTenga en cuenta el
--link some-postgres
cuando estábamos abriendo el pgAdmin. Este comando hace que el contenedor de postgres sea visible para el contenedor pgAdmin.fuente
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.
Tampoco tuve suerte con el uso--link
para que mi contenedor pgadmin se comunicara con mi contenedor de postgres. Sin embargo, puedo acceder a postgres desde una instalación local de pgadmin.Incluí esto en el archivo docker yaml para obtener la base de datos y pgAdmin:
El nombre de usuario de postgres es alphaone y la contraseña es xxxxxxxxxxx.
Haz una
docker ps
para obtener la identificación del contenedor y luegodocker inspect <dockerContainerId> | grep IPAddress
p.ej:
docker inspect 2f50fabe8a87 | grep IPAddress
Inserte la dirección IP en pgAdmin y las credenciales de la base de datos utilizadas en la ventana acoplable:
fuente
localhost
no funcionó.En mi caso, tenía un contenedor de PostgreSQL, por lo que no cambié mi contenedor ni creé un enfoque de docker-compose, necesitaba pgadming después de unos meses para haber instalado PostgreSQL, así que este es mi enfoque:
docker inspect my_container_id_postgreSQL
La red asignada a PostgreSQL fue:
"Redes": {"docker_default": {"IPAddress": "172.18.0.2", ...}}
Ejecuté mi PGADMIN con
--network
comando.docker run -p 85:80 --network docker_default -e '[email protected]' -e 'PGADMIN_DEFAULT_PASSWORD = SuperSecret' -d dpage / pgadmin4
Inserte la dirección IP en pgAdmin y las credenciales de la base de datos utilizadas en la ventana acoplable.
Espero que esto pueda ser de utilidad para alguien. Saludos.
fuente
Para ordenar o encontrar su IP del contenedor, use el siguiente comando
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id
Referencia: Cómo obtener la dirección IP de un contenedor Docker del host
fuente
Tienes que exponer el puerto de postgres en el contenedor a tu sistema local. Haz esto ejecutando tu contenedor de esta manera:
docker run -p 5432:5432 <name/id of container>
cuando se conecte con su cliente GUI o CLI, asegúrese de usar la dirección IP, no el host local, incluso si su dirección IP es la dirección IP del host local.
docker ps
le daría la dirección IP en la que se encuentra su contenedor de postgres.fuente
Si verificó que PostgreSQL se está ejecutando y puede conectarse allí con una copia local de PgAdmin ...
La respuesta es simple: use
host.docker.internal
is en lugar delocalhost
para el PgAdmin que se ejecuta dentro de Dockerfuente
También puede crear una red de puente Docker para hacer esto.
$ 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
Abra http: // localhost: 8000 /
El nombre de host / dirección utilizada anteriormente es el nombre del contenedor de Postgres proporcionado por
--name pg
fuente
Después de enfrentar este problema durante dos días, pude resolverlo.
la solución de este problema ya es respondida por personas como inspeccionar
docker inspect CONTAINER_ID
pero mientras ejecutaba este comando obtuve una gran cantidad de registros como la configuración de red de la configuración del host, etc., así que me confundí qué dirección IP agregar en la conexión pgAdmin porque probé 0.0.0.0 y config, host, networkSettings diferente -2 IPAddress en el registros, pero finalmente funciona después de intentarlo mucho.
funciona con qué IP, tenemos que agregar esa dirección IP de red (que creamos para conectar el postgres y pgAdmin .)
como en mi caso cuando corro: -
así que tenemos que agregar NetworkSettings -> Red -> Postgres (red creada por la mía) -> IPAddress, es decir, "IPAddress": "192.168.16.2".
Después de agregar esta ip, funcionará.
Espero que te ayude.
fuente
Para encontrar la ip correcta para su contenedor, ejecute los siguientes comandos:
Verifique la identificación del contenedor:
Para comprobar la IP correcta de su contenedor:
La configuración de PostgreSQL y PgAdmin con Docker es simple, si no es correcta, recomiendo rehacer la configuración desde cero, si su problema es más profundo.
Aquí hay un script que desarrollé para resolver este problema. script-sh / install-docker-postgres-y-pgadmin
fuente
Para macOS, las IP de
postgres
ypgadmin4
son diferentes a lasdocker inspect
proporcionadas. TipoEche un vistazo al nombre del servidor a la izquierda. Es
default
por defecto.docker-machine ip default
será la IP que necesita utilizar para ambos ,pgadmin4
en el navegador ypostgres
en lapgadmin4
configuración.fuente
La solución que probé y funcionó para mí fue crear un archivo de composición de docker donde incluí postgress y pgadmin como servicios. Para más detalles: Conectando pgadmin a postgres en la ventana acoplable
fuente