Levanta una base PostgreSQL y un panel Adminer para practicar SQL desde el navegador. Compose describe ambos servicios, espera a que la base esté lista y guarda sus datos en un volumen que sobrevive a la sustitución del contenedor.
Última revisión: 2 de octubre de 2026. Configuración revisada para: Compose actual, imagen oficial postgres:18 y adminer:6.1.1, etiqueta publicada en Docker Hub durante la revisión. Se comprobó la estructura del YAML; no se ejecutaron los contenedores en este equipo porque no dispone de Docker.
Prepara el entorno
Instala Docker Desktop desde su página oficial en Windows o macOS y arranca su motor. En Linux puedes usar Docker Engine y el plugin Compose. Comprueba docker version y docker compose version: el primer comando necesita poder contactar al motor. Esta receta utiliza docker compose, con espacio, y no requiere el antiguo ejecutable docker-compose.
Crea una carpeta vacía y añade un archivo .env:
POSTGRES_PASSWORD=CAMBIA_ESTE_VALOR_POR_UNA_CLAVE_LARGAReemplaza ese texto por una contraseña propia antes de arrancar. Guarda también un .gitignore con una línea .env. El archivo es texto sin cifrar: no lo subas al repositorio ni lo incluyas en capturas. Estas credenciales son para una base local de desarrollo.
Dos servicios, una red
Guarda lo siguiente como compose.yaml dentro de esa misma carpeta:
name: silencers-lab
services:
db:
image: postgres:18
environment:
POSTGRES_USER: lab
POSTGRES_DB: lab
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?Define POSTGRES_PASSWORD en .env}
volumes:
- db_data:/var/lib/postgresql
healthcheck:
test: ["CMD-SHELL", "pg_isready -U lab -d lab"]
interval: 5s
timeout: 3s
retries: 20
start_period: 10s
adminer:
image: adminer:6.1.1
environment:
ADMINER_DEFAULT_SERVER: db
ports:
- "127.0.0.1:8080:8080"
depends_on:
db:
condition: service_healthy
volumes:
db_data:db es el nombre DNS que Adminer utiliza dentro de la red del proyecto. Allí localhost apuntaría al propio contenedor del panel. La base no publica el puerto 5432 en tu equipo; el panel sí publica el 8080, ligado exclusivamente a la dirección local.
El volumen apunta a /var/lib/postgresql: la imagen PostgreSQL 18 utiliza un directorio por versión bajo esa ruta. No copies sin revisar el montaje /var/lib/postgresql/data de ejemplos para versiones anteriores. El healthcheck comprueba disponibilidad del servidor; no verifica que tu aplicación tenga tablas ni que su contraseña sea correcta. depends_on espera ese estado saludable al crear el panel.

Arranca y crea algo que puedas recuperar
Ejecuta en la carpeta del proyecto:
docker compose config --quiet
docker compose pull
docker compose up -d
docker compose psLa validación debe terminar sin errores y db debe llegar a healthy. Abre http://127.0.0.1:8080. En Adminer selecciona PostgreSQL, servidor db, usuario lab, base lab y la contraseña del .env. No introduzcas 127.0.0.1 en el campo servidor.
Abre la opción para ejecutar SQL y crea una tabla de prueba:
CREATE TABLE notes (
id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
body text NOT NULL
);
INSERT INTO notes (body) VALUES ('El volumen conserva esta nota');
SELECT * FROM notes;Debe aparecer una fila. Ahora ejecuta docker compose down y luego docker compose up -d. Vuelve a consultar la tabla: debe seguir allí porque el volumen no fue eliminado. No uses down -v si quieres conservarla: esa opción elimina los volúmenes declarados del proyecto y sus datos.
Cuando algo no arranca
Si el motor no responde, abre Docker Desktop o revisa el servicio Engine. Si el 8080 está ocupado, cambia únicamente el puerto del lado del equipo, por ejemplo 127.0.0.1:8081:8080, y visita el 8081. Para investigar la base utiliza docker compose logs --tail 80 db; evita publicar logs que contengan credenciales.
Cambiar POSTGRES_PASSWORD en .env no cambia la contraseña de una base que ya existe en el volumen: las variables de inicialización se aplican al crear un directorio de datos vacío. Cambia la contraseña desde PostgreSQL o crea un laboratorio nuevo después de respaldar lo necesario. Tampoco actualices una versión mayor cambiando solo la etiqueta: planifica una migración o restauración.
El volumen aporta persistencia local, no una copia de seguridad. Como siguiente ejercicio exporta la tabla desde Adminer y restáurala en otro proyecto; verifica la recuperación antes de confiar en ese respaldo.
Fuentes y documentación
Proyectos y desarrolladores: Docker Compose, Docker y colaboradores, repositorio Apache 2.0; PostgreSQL, PostgreSQL Global Development Group, descarga y licencia; Adminer, Jakub Vrána y colaboradores, imagen mantenida por Tim Düsterhus, sitio y descarga oficial, Apache 2.0 o GPL 2 según el proyecto. Docker Desktop oficial tiene sus propios términos de uso. Se enlazan las imágenes originales de Docker Hub; no se adjuntan paquetes de terceros. Diagramas originales de The Silencers.






Comentarios 0
Únete a la conversación con tu cuenta.
Inicia sesiónCargando comentarios…