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>