start postgres password instalar container compose postgresql docker

instalar - postgresql docker password



El contenedor Docker para Postgres 9.1 no expone el puerto 5432 al host (3)

Ejecute la imagen de Postgre con la asignación de puertos correcta usando -p <host_port>:<container_port> :

docker run --same-options-as-step-one -d -p 5432:5432 postgres:9.1

Estoy tratando de usar un contenedor Docker para ejecutar un servidor PostgreSQL y conectarme desde mi máquina host.

Mi configuración es:

  • Máquina host: Mac OS X 10.10.5
  • Docker 1.10.1

He hecho esto:

Paso 1 : crear un volumen para datos postgres permanentes

docker volume create --name postgres_data

Paso 2 : Inicia la instancia de postgres.

ACTUALIZACIÓN : como se sugirió en los comentarios, especifiqué la asignación de puertos al ejecutar el contenedor

docker run --name my_postgres_container -e POSTGRES_PASSWORD=my_password -v postgres_data:/var/lib/postgresql/data -p 5432:5432 -d postgres:9.1

Paso 3 : conéctate a la instancia de Docker haciendo esto:

docker run -it --link my_postgres_container:postgres --rm postgres:9.1 sh -c ''exec psql -h "$POSTGRES_PORT_5432_TCP_ADDR" -p "$POSTGRES_PORT_5432_TCP_PORT" -U postgres''

Pero quiero conectarme a esa instancia solo por:

psql -h localhost -p 5432 -U postgres

Como si hubiera instalado Postgres localmente en mi máquina host.

El problema es que el puerto 5432 no está expuesto . Entonces, no puedo conectarme con eso:

sudo lsof -i -P | grep -i "listen" sudo lsof -i -P | grep -i "listen" -> sin puerto 5432 abierto

ACTUALIZACIÓN 2 : Aún más extraño. También he hecho esto:

Deja de Docker. Luego, ejecute una instancia normal de PostgreSQL 9.4.4 en mi máquina host (no hay ninguna ventana acoplable involucrada aquí, solo postgres corriendo en mi host Mac OS X, escuchando en el puerto 5432). Todo es normal:

sudo lsof -i -P | grep -i "postgres" postgres 14100 jorge 6u IPv4 0x780274158cebef01 0t0 TCP localhost:5432 (LISTEN)

Puedo conectarme con mi instancia local de postgres sin ningún problema (mire la salida del comando: es el postgres compilado para Mac OS X, mi host):

psql -h localhost -U postgres -c "select version()" version --------------------------------------------------------------------------------------------------------------------------------------- PostgreSQL 9.4.4 on x86_64-apple-darwin14.3.0, compiled by Apple LLVM version 6.1.0 (clang-602.0.53) (based on LLVM 3.6.0svn), 64-bit (1 row)

Ahora la parte divertida. Vuelvo a iniciar mi instancia de Docker, mientras se ejecuta la instancia de PostgreSQL del host.

¡Comienza! (Y no debería). Incluso puedo conectarme usando el docker run ...

docker run -it --link my_postgres_instance:postgres --rm postgres:9.1 sh -c ''exec psql -h "$POSTGRES_PORT_5432_TCP_ADDR" -p "$POSTGRES_PORT_5432_TCP_PORT" -U postgres''

Si ejecuto la versión selecta () ahora, muestra postgres ejecutándose dentro de mi instancia de la ventana acoplable al mismo tiempo que postgres se ejecuta en mi host, fuera de la ventana acoplable, usando el mismo puerto 5432 . (Mire la salida, es postgres compilado para Debian, el sistema operativo dentro del contenedor postgres: 9.1)

postgres=# select version(); version ------------------------------------------------------------------------------------------------ PostgreSQL 9.1.20 on x86_64-unknown-linux-gnu, compiled by gcc (Debian 4.9.2-10) 4.9.2, 64-bit (1 row)

¿Por qué?

¿Tiene sentido? Mi objetivo final es ejecutar una aplicación Django en otro contenedor Docker y conectar con mi instancia de Postgres . ¿Cómo podría hacer eso?


Es 2018 y acabo de tener un problema similar. La solución para mí parecía estar en el orden de los accesorios de la ventana acoplable. por ejemplo, esto resultó en que no se expusiera ningún puerto;

docker run -d --name posttest postgres:alpine -e POSTGRES_PASSWORD=fred -p 5432:5432

mientras que esto funcionó bien (imagen expuesta puerto 5432 como se esperaba);

docker run --name posttest -d -p 5432:5432 -e POSTGRES_PASSWORD=fred postgres:alpine


Su host docker es una máquina virtual, que tiene sus propios direccionamientos IP. Puede detectar esta dirección IP ingresando el siguiente comando:

docker-machine ip

La respuesta será algo así como 192.168.99.100.

Cuando haya asignado los puertos utilizando el conmutador -p 5432: 5432, podrá conectarse a Postgres con cualquier herramienta de su máquina de desarrollo usando la dirección IP mencionada.