postgresql - instalar - ¿Cómo entrar en psql de un contenedor postgres en ejecución?
install postgresql ubuntu 18 (3)
Creé un contenedor postgres usando el tutorial en el sitio web de fig . Llamé al contenedor db .
El contenedor se está ejecutando y mi aplicación se conecta perfectamente. Intenté ejecutar el comando fig run db psql
con el contenedor db ejecutándose y obtuve el error:
psql: could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
¿Cómo puedo acceder a la interfaz psql
en el contenedor de db en ejecución?
¿Puedes publicar el resultado de docker ps
? Supongo que necesitas especificar el puerto que expone el contenedor postgres. Ejecutar docker ps
debería darte
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
948b1f6ebc0a my_postgres:latest "/usr/lib/postgresql 6 days ago Up 6 days 0.0.0.0:49155->5432/tcp db
y mirando debajo de la columna de PUERTOS para su contenedor db, verá el puerto sobre el que el db está realmente expuesto. En este caso es 49155, pero Docker elegirá un puerto aleatorio entre 49153 y 65535 si no se especifica explícitamente en el inicio del contenedor. Debe suministrar la opción -p
a psql para luego orientar ese puerto como tal
psql -p 49155 ...
Necesita ejecutar un nuevo contenedor para conectarse al que comenzó con la fig. Esto es así porque el contenedor principal inicia el servicio por defecto y, si lo hace, fig run db psql
fig NO arrancará el servicio, sino que ejecutará el cliente psql en su lugar. Ver el archivo Docker .
Entonces, para conectarse al servicio PostgreSQL necesita ejecutar otro contenedor vinculado al iniciado por la fig. Ver https://registry.hub.docker.com/_/postgres/ .
Primero, como fig cambia los nombres de los contenedores iniciados, verifique la columna NAMES del contenedor docker ps
después de haber hecho el fig up
. Entonces:
docker run -it --link <postgres_container_name>:postgres --rm postgres sh -c ''exec psql -h "$POSTGRES_PORT_5432_TCP_ADDR" -p "$POSTGRES_PORT_5432_TCP_PORT" -U postgres''
Puedes hacer el truco del docker exec
así como también el de @sargas, pero la forma de enlazar me suena más canónica.
fig creará un contenedor acoplable con un nombre diferente al utilizado en el archivo fig.yml
.
Lo conseguí funcionando buscando el nombre del contenedor con docker ps
y mirando la columna NAMES .
A continuación, psql
comando psql
en el contenedor en ejecución con docker exec -ti NAME_OF_CONTAINER psql -U YOUR_POSTGRES_USERNAME
Tenga en cuenta que docker exec
ejecuta el comando psql
en un contenedor en ejecución, a diferencia de docker run
que iniciará un nuevo contenedor.
Actualizar
la figura ahora se llama docker-compose