Levantar Postgres con docker run
El comando completo
Sección titulada «El comando completo»Requiere Docker Engine activo y el puerto 5432 disponible. El bloque multilínea usa Bash/zsh; en PowerShell escríbelo en una sola línea o utiliza su carácter de continuación. La contraseña mostrada es solo para un laboratorio local.
docker run -d \ --name mi-postgres \ -e POSTGRES_USER=user \ -e POSTGRES_PASSWORD=secreto \ -e POSTGRES_DB=miapp \ -p 127.0.0.1:5432:5432 \ -v datos-postgres:/var/lib/postgresql/data \ postgres:16Esto levanta Postgres 16 en segundo plano, con un usuario, contraseña y base de datos ya creados, accesible en localhost:5432, y con los datos guardados en un volumen que sobrevive a docker rm (ver Persistencia de datos para el porqué del -v).
Las variables de entorno de la imagen oficial
Sección titulada «Las variables de entorno de la imagen oficial»| Variable | Para qué |
|---|---|
POSTGRES_USER | Usuario que se crea (default: postgres) |
POSTGRES_PASSWORD | Obligatoria — la imagen no arranca sin ella |
POSTGRES_DB | Base de datos que se crea al primer arranque (default: igual al POSTGRES_USER) |
Estas variables solo tienen efecto la primera vez que el contenedor arranca con un volumen vacío — si ya existe un volumen con datos, la imagen no vuelve a aplicar estas variables (no resetea usuario/contraseña en cada arranque).
Por qué el volumen desde el primer comando
Sección titulada «Por qué el volumen desde el primer comando»-v datos-postgres:/var/lib/postgresql/dataEn la imagen postgres:16, monta /var/lib/postgresql/data. Sin un volumen nombrado, la imagen puede crear un volumen anónimo: eliminar el contenedor no siempre elimina ese volumen, pero un contenedor nuevo no lo reutiliza automáticamente. Un nombre estable facilita reconectar los datos; no es un backup. Revisa la ruta documentada antes de cambiar de versión principal.
Verificar que está corriendo
Sección titulada «Verificar que está corriendo»docker psdocker logs mi-postgresEn los logs, la línea database system is ready to accept connections confirma que Postgres terminó de arrancar y ya acepta conexiones.
Elegir la versión
Sección titulada «Elegir la versión»docker run ... postgres:16 # una versión mayor específica — recomendadodocker run ... postgres:16.4 # versión exacta — más reproducible aúndocker run ... postgres # = postgres:latest, evitar en proyectos reales (ver Build y tags)Fijar al menos la versión mayor (postgres:16) evita sorpresas si en algún momento se hace docker pull postgres de nuevo y trae una versión mayor distinta con cambios incompatibles.
Consideraciones
Sección titulada «Consideraciones»- Para uso diario en un proyecto real, el patrón recomendado es declarar esto en un
docker-compose.ymlen vez de repetir el comando largo cada vez — ver Postgres con Compose. -p 5432:5432solo hace falta si quieres conectarte desde afuera de Docker (un cliente en tu máquina, o la app corriendo nativa) — si la app que consume esta base de datos también corre en un contenedor en la misma red, no hace falta publicar el puerto (ver Redes).
Comprobación de persistencia
Sección titulada «Comprobación de persistencia»Crea una tabla y una fila de prueba con la guía de conexión, reinicia con docker restart mi-postgres y vuelve a consultarla. La fila debe seguir allí. Para una prueba de recreación, conserva y vuelve a montar el mismo volumen; no ejecutes docker volume rm sobre los datos que quieres conservar.