start postgres container compose postgresql docker remote-connection

container - Conexión a Postgresql en un contenedor acoplable desde afuera



postgresql 10 docker (11)

Tengo Postgresql en un servidor en un contenedor acoplable. ¿Cómo puedo conectarme desde afuera, es decir, desde mi computadora local? ¿Qué configuración debo aplicar para permitir eso?


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).


En caso de que sea una aplicación de fondo django, puede hacer algo como esto.

docker exec -it container_id python manage.py dbshell


Estoy usando django con postgres en contenedores Docker. en el archivo docker-compose, agregue lo siguiente:

psql -h localhost -p 5432 -U postgres

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.


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.


Me las arreglé para ejecutarlo en Linux

  • Primero ejecuto el docker postgres, asegúrese de que el puerto esté publicado, uso alpine porque es liviano.

    sudo docker run --rm -P -p 127.0.0.1:5432:5432 -e POSTGRES_PASSWORD="1234" --name pg postgres:alpine

  • 2 use 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


Para conectarse desde el host local necesita agregar ''--net host'':

db: image: postgres:10-alpine environment: - POSTGRES_DB=app - POSTGRES_USER=postgres - POSTGRES_PASSWORD=supersecretpassword **ports: - "6543:5432"**

Puede acceder al servidor directamente sin usar exec desde su host local, usando:

docker run --name some-postgres --net host -e POSTGRES_PASSWORD=mysecretpassword -d -p 5432:5432 postgres


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 de Postgres desde fuera de su contenedor acoplable :

psql -h localhost -p 5416 -U <my-user> -d <my-database>


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 se puede acceder a tu postgres desde tu public-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.


También puede acceder a través del comando docker exec también.

$ docker exec -it postgres-container bash # su postgres $ psql


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


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>