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?
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):
docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d -p 5432:5432 postgres
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)
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
05b3a3471f6f postgres "/docker-entrypoint.s" 1 seconds ago Up 1 seconds 0.0.0.0:5432->5432/tcp some-postgres
Entra en tu contenedor y crea una base de datos:
docker exec -it 05b3a3471f6f bash
root@05b3a3471f6f:/# psql -U postgres
postgres-# CREATE DATABASE mytest;
postgres-# \q
Vaya a su localhost (donde tiene alguna herramienta o el cliente psql).
psql -h public-ip-server -p 5432 -U postgres
(contraseña mysecretpassword)
postgres=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+------------+------------+-----------------------
mytest | postgres | UTF8 | en_US.utf8 | en_US.utf8 |
postgres | postgres | UTF8 | en_US.utf8 | en_US.utf8 |
template0 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres
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.
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
sudo
para ejecutar tu contenedor.
También puede acceder a través del comando docker exec:
$ docker exec -it postgres-container bash
# su postgres
$ psql
O
$ docker exec -it postgres-container psql -U postgres
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:
# Run PostgreSQL
docker run --name postgres-container -e POSTGRES_PASSWORD=password -it -p 5433:5432 postgres
# Create database
docker exec -it postgres-container createdb -U postgres my-db
-e POSTGRES_DB=my-db
para crear my-db en lugar de postgres
Estoy usando django con postgres en contenedores Docker. en el archivo docker-compose, agregue lo siguiente:
db:
image: postgres:10-alpine
environment:
- POSTGRES_DB=app
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=supersecretpassword
**ports:
- "6543:5432"**
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.
Para conectarse desde el host local necesita agregar '--net host':
docker run --name some-postgres --net host -e POSTGRES_PASSWORD=mysecretpassword -d -p 5432:5432 postgres
Puede acceder al servidor directamente sin usar exec desde su host local, usando:
psql -h localhost -p 5432 -U postgres
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.
db:
image: postgres
ports:
- 5432:5432
restart: always
volumes:
- "db_sql:/var/lib/mysql"
environment:
POSTGRES_USER: root
POSTGRES_PASSWORD: password
POSTGRES_DB: postgres_db
Esta fue mi experiencia que quería compartir. Quizás alguien pueda usarlo.
/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 conpsql
comandos de la siguiente manera:
# CREATE DATABASE test;
# \c test
# CREATE TABLE test_table(something int);
# INSERT INTO test_table VALUES (123);
# SELECT * FROM test_table;
# \q
Paso 7 : abra una aplicación cliente de base de datos comopgadmin
odbeaver
e ingrese lo siguiente en los campos de conexión:
Host: localhost
Database: test
User: postgres
Password: password
Paso 8 : ingrese la consultaselect * from test_table
en el editor de consultas y debería poder ver la salida123
Por alguna razón, el puerto 5432 parece estar protegido. Cambié mi configuración de puerto de 5432:5432
a 5416:5432
y el siguiente comando funcionó para conectarse a su base de datos postgres desde fuera de su contenedor acoplable :
psql -h localhost -p 5416 -U <my-user> -d <my-database>
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
docker exec -it <container_name>
entonces obtendrá la raíz: root@868594e88b53:/#
necesita la conexión de la base de datos
psql postgresql://<username>:<databasepassword>@postgres:5432/<database>
docker ps -a
para obtener identificadores de contenedor y luego docker exec -it psql -U -W
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.