Tengo Postgresql en un servidor en un contenedor acoplable. ¿Cómo puedo conectarme desde el exterior, es decir, desde mi computadora local? ¿Qué configuración debo aplicar para permitir eso?
197
Tengo Postgresql en un servidor en un contenedor acoplable. ¿Cómo puedo conectarme desde el exterior, es decir, desde mi computadora local? ¿Qué configuración debo aplicar para permitir eso?
Respuestas:
Puede ejecutar Postgres de esta manera (mapear un puerto):
Así que ahora ha asignado el puerto 5432 de su contenedor al puerto 5432 de su servidor.
-p <host_port>:<container_port>
.Así que ahora puedes acceder a tus postgres desde tupublic-server-ip:5432
Para probar: Ejecute la base de datos postgres (comando anterior)
Entra en tu contenedor y crea una base de datos:
Vaya a su localhost (donde tiene alguna herramienta o el cliente psql).
(contraseña mysecretpassword)
Entonces está accediendo a la base de datos (que se ejecuta en Docker en un servidor) desde su host local.
En esta publicación se expande en detalle.
fuente
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
Me las arreglé para ejecutarlo en Linux
ejecuta el docker postgres: asegúrate de que el puerto esté publicado, yo uso alpine porque es ligero
sudo docker run --rm -P -p 127.0.0.1:5432:5432 -e POSTGRES_PASSWORD="1234" --name pg postgres:alpine
usando otra terminal, acceda a la base de datos desde el host usando la uri de postgres
psql postgresql://postgres:1234@localhost:5432/postgres
para usuarios de mac, reemplace psql con pgcli
fuente
sudo
para ejecutar tu contenedor.También puede acceder a través del comando docker exec:
O
fuente
su postgres
hacer?Ya había ejecutado postgres en la máquina host y no quería permitir conexiones desde la red, por lo que ejecuté una instancia temporal de postgres en el contenedor y creé la base de datos en solo dos líneas:
fuente
-e POSTGRES_DB=my-db
para crear my-db en lugar de postgresEstoy usando django con postgres en contenedores Docker. en el archivo docker-compose, agregue lo siguiente:
que agregará un puerto accesible por su máquina local. Por mi parte, conecté DBeaver a él. Esto evitará conflictos de puertos entre su solicitud de aplicación y la solicitud de la máquina local. Al principio, recibí un mensaje que decía que el puerto 5432 está en uso (que es por la aplicación django), por lo que pgAdmin o DBeaver no pude acceder.
fuente
Para conectarse desde el host local necesita agregar '--net host':
Puede acceder al servidor directamente sin usar exec desde su host local, usando:
fuente
Intenté conectarme desde localhost (mac) a un contenedor de postgres. Cambié el puerto en el archivo docker-compose de 5432 a 3306 y comencé el contenedor. No tengo idea de por qué lo hice: |
Luego intenté conectarme a postgres a través de PSequel y adminer y la conexión no se pudo establecer.
Después de volver al puerto 5432, todo funciona bien.
Esta fue mi experiencia que quería compartir. Quizás alguien pueda usarlo.
fuente
/var/lib/mysql
:?Supongo que desea poder ver los datos presentes en su contenedor cada vez que se conecta desde afuera. Para ello, tendrá que persistir datos de la imagen de postgres sucesivamente.
Si no tiene datos persistentes, deberá repetir todo lo que hizo la primera vez.
Los pasos 3, 5, 6, 7 y 8 responden su pregunta directamente.
Aquí está la descripción detallada de todo el proceso que seguí en Windows 10 Powershell (los comandos también son los mismos en Linux y MacOS):
Paso 1 : Inicie PowerShell en modo no administrativo
Paso 2 : descarga la imagen del acoplador postgres:
docker pull postgres:latest
Paso 3 : Inicie el contenedor acoplable en modo separado y conserve los datos en la imagen de postgres creando un volumen y vinculándolo a un destino
( Nota : 5432 es el puerto predeterminado que se usa de manera predeterminada; pero dígalo explícitamente para evitar errores de conexión de clientes como pgadmin, dbeaver, etc.)
docker run --name postgres-test -e POSTGRES_PASSWORD=password -p 5432:5432 -v postgres-data:/var/lib/postgresql/data -d postgres:latest
Paso 4 : Verifique el estado de los contenedores en ejecución
docker ps -a
Paso 5 : vaya dentro de container_name en modo interactivo
( Nota : los comandos como ls, pwd, etc. se pueden ejecutar aquí si ha verificado los contenedores de Linux durante la instalación)
docker exec -it postgres-test psql -U postgres
Paso 6 : crear datos de muestra. En este punto, puedes jugar con
psql
comandos de la siguiente manera:Paso 7 : abra una aplicación cliente de base de datos como
pgadmin
odbeaver
e ingrese lo siguiente en los campos de conexión:Paso 8 : ingrese la consulta
select * from test_table
en el editor de consultas y debería poder ver la salida123
fuente
Por alguna razón, el puerto 5432 parece estar protegido. Cambié mi configuración de puerto de
5432:5432
a5416:5432
y el siguiente comando funcionó para conectarse a su base de datos postgres desde fuera de su contenedor acoplable :fuente
postgres
servicio en su máquina host que ya se unirá a localhost: 5432 evitando que lo use. La asignación de un puerto de host diferente al puerto predeterminado 5432 dentro del contenedor es una buena solución para eso; alternativamente, podría detener el servicio postgres en su host, pero tal vez se use para algo que necesite.primero abra la imagen acoplable para los postgres
entonces obtendrá la raíz:
root@868594e88b53:/#
necesita la conexión de la base de datosfuente
En caso de que sea una aplicación backend de django, puede hacer algo como esto.
fuente
Aquí hay buenas respuestas, pero si desea tener alguna interfaz para la administración de la base de datos postgres, puede instalar pgAdmin en su computadora local y conectarse a la máquina remota utilizando su IP y el puerto expuesto de postgres (por defecto 5432).
fuente
docker ps -a
para obtener identificadores de contenedor y luego docker exec -it psql -U -Wfuente
Sé que es tarde, si usaste docker-compose como @Martin
Estos son los fragmentos que me ayudaron a conectarme a psql dentro del contenedor
docker-compose run db bash
root@de96f9358b70:/# psql -h db -U root -d postgres_db
No puedo comentar porque no tengo 50 reputación. Espero que esto ayude.
fuente