Cómo administrar bases de datos con Adminer y pgweb en Docker
Índice de contenidos
- Puntos clave
- ¿Qué es un administrador de bases de datos por web?
- ¿Qué hace especial a Adminer?
- El docker-compose.yml de Adminer y pgweb
- ¿Qué aporta pgweb frente a Adminer?
- ¿Cómo proteger estos paneles?
- Preguntas frecuentes
- ¿Puedo usar Adminer con MySQL y MariaDB además de PostgreSQL?
- ¿Por qué no debo dejar la etiqueta latest en producción?
- ¿pgweb permite modificar datos o solo leerlos?
- Conclusión
- Fuentes
Adminer y pgweb son dos administradores de bases de datos por web que se levantan en Docker con un solo contenedor cada uno. Adminer es un único archivo PHP que maneja MySQL, PostgreSQL y otros seis motores; pgweb es un explorador en Go dedicado a PostgreSQL. Esta guía trae un docker-compose.yml listo para copiar y explica cómo protegerlos.
Cuando tienes una base de datos corriendo en un contenedor, tarde o temprano necesitas asomarte a sus tablas sin abrir una terminal. Para eso están los administradores de bases de datos por web, y dos de los más prácticos en el mundo autoalojado son Adminer y pgweb. En esta guía levantas ambos con un solo archivo docker-compose.yml, aprendes cuándo conviene cada uno y, lo más importante, cómo protegerlos para que no acaben expuestos en Internet. La misma explicación está disponible en inglés.
Puntos clave
- Adminer es un administrador de bases de datos que cabe en un único archivo PHP de unos 480 KB y maneja ocho motores distintos: MySQL, MariaDB, PostgreSQL, SQLite, MS SQL, Oracle, Elasticsearch y MongoDB.
- pgweb es un explorador escrito en Go, dedicado en exclusiva a PostgreSQL, que se distribuye como un binario único y añade un modo de solo lectura muy útil para producción.
- Cada herramienta se levanta con un contenedor: la imagen oficial
adminerescucha en el puerto 8080 ysosedoff/pgweben el 8081, sin puertos en conflicto. - Ninguno de los dos añade autenticación propia más allá del acceso a la base de datos, así que jamás deben publicarse abiertos en Internet: se atan a
127.0.0.1o se ponen detrás de un proxy con SSO. - El montaje de esta guía incluye una base de datos PostgreSQL de ejemplo, de modo que puedes copiar el
docker-compose.yml, arrancarlo y tener los dos paneles funcionando en menos de un minuto.
¿Qué es un administrador de bases de datos por web?
Un administrador de bases de datos por web es una aplicación que se conecta a tu motor de datos (PostgreSQL, MySQL, MariaDB…) y te ofrece, desde el navegador, lo que antes hacías a mano con el cliente de línea de comandos: ver las tablas, editar filas, lanzar consultas SQL, revisar índices o exportar datos. Es el equivalente autoalojado de herramientas de escritorio como DBeaver o pgAdmin, pero sin instalar nada en tu equipo: basta con abrir una URL.
En una infraestructura montada con Docker esto encaja de forma natural. Tu base de datos ya vive en un contenedor, así que añadir otro contenedor con el administrador y conectarlo a la misma red interna te da acceso inmediato. La contrapartida es la seguridad: estas herramientas dan control total sobre los datos, por lo que la regla número uno es no dejarlas accesibles desde fuera de tu red. Volveremos a ello al final.
¿Qué hace especial a Adminer?
Adminer nació en 2007 de la mano de Jakub Vrána como una alternativa ligera a phpMyAdmin (de hecho, su nombre original era phpMinAdmin). Su gran virtud es la simplicidad radical: toda la herramienta cabe en un único archivo PHP de unos 480 KB, frente a los cerca de 13,7 MB y decenas de archivos de phpMyAdmin. Esa diferencia no es solo estética; una superficie de código más pequeña significa menos que auditar y menos que mantener.
Lo segundo que lo distingue es su alcance. Como recoge su web oficial, "Adminer está disponible para MySQL, MariaDB, PostgreSQL, SQLite, MS SQL, Oracle, Elasticsearch y MongoDB", así que con un solo contenedor cubres prácticamente cualquier base de datos que uses en tu servidor. La versión actual de la imagen oficial es la 5.4.2, y se apoya en el servidor web incorporado de PHP para escuchar en el puerto 8080. Admite además algunas variables de entorno cómodas: ADMINER_DEFAULT_SERVER para fijar el servidor al que se conecta por defecto, ADMINER_DESIGN para cambiar el tema visual y ADMINER_PLUGINS para cargar extensiones.
El docker-compose.yml de Adminer y pgweb
Crea una carpeta para el proyecto y guarda dentro este docker-compose.yml. Incluye una base de datos PostgreSQL de ejemplo para que los dos paneles tengan algo a lo que conectarse; si ya tienes tu propia base de datos, borra el servicio db y apunta las herramientas a la red donde vive. Cambia cambia_esta_clave por una contraseña propia antes de arrancar:
services:
db:
image: postgres:17-alpine
restart: unless-stopped
environment:
POSTGRES_DB: midb
POSTGRES_USER: usuario
POSTGRES_PASSWORD: cambia_esta_clave
volumes:
- db_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U usuario -d midb"]
interval: 30s
timeout: 5s
retries: 5
adminer:
image: adminer:5.4.2
restart: unless-stopped
depends_on:
db:
condition: service_healthy
environment:
ADMINER_DEFAULT_SERVER: db
ADMINER_DESIGN: dracula
ports:
- "127.0.0.1:8080:8080"
pgweb:
image: sosedoff/pgweb:0.17.0
restart: unless-stopped
depends_on:
db:
condition: service_healthy
environment:
PGWEB_DATABASE_URL: postgres://usuario:cambia_esta_clave@db:5432/midb?sslmode=disable
command: ["--readonly", "--bind=0.0.0.0", "--listen=8081"]
ports:
- "127.0.0.1:8081:8081"
volumes:
db_data:
Fíjate en dos decisiones del archivo. Los puertos se publican como 127.0.0.1:8080 y 127.0.0.1:8081, no como 8080 a secas: así los paneles solo responden desde la propia máquina y no quedan expuestos a la red aunque el servidor tenga una IP pública. Y pgweb arranca con --readonly para que desde el navegador solo se puedan leer datos, nunca modificarlos por accidente.
Con el archivo listo, arranca la pila en segundo plano y comprueba el estado de los contenedores:
docker compose up -d
docker compose ps
docker compose logs -f pgweb
Cuando los tres contenedores figuren como running, abre http://localhost:8080 para Adminer y http://localhost:8081 para pgweb. En Adminer eliges el motor (PostgreSQL), escribes db como servidor y usas el usuario y la contraseña del docker-compose.yml. pgweb, en cambio, se conecta solo con la cadena PGWEB_DATABASE_URL que ya le pasaste, así que verás las tablas directamente.
¿Qué aporta pgweb frente a Adminer?
pgweb es un proyecto distinto y con otra filosofía. Lo creó Dan Sosedoff en 2014 y está escrito en Go, de modo que se distribuye como un único binario compilado sin dependencias, lo que explica que su imagen sea tan ligera y arranque al instante. A diferencia de Adminer, no pretende cubrir muchos motores: se centra por completo en PostgreSQL y, a cambio, ofrece una experiencia de exploración muy pulida.
Su interfaz está pensada para navegar por el esquema con comodidad: lista de tablas en un panel lateral, vista de filas paginada, estructura de columnas e índices, un editor de consultas con resaltado y exportación de resultados a CSV, JSON o XML. La versión 0.17.0, publicada en noviembre de 2025, se compiló con Go 1.24 y añadió soporte para PostgreSQL 18. El detalle práctico más importante al usarlo en Docker es el arranque: por defecto pgweb se enlaza a localhost dentro del contenedor, así que hay que pasarle --bind=0.0.0.0 (como en el docker-compose.yml de arriba) o no será accesible desde el navegador del anfitrión.
¿Cuál elegir? Si trabajas solo con PostgreSQL y quieres un explorador rápido y de solo lectura para vigilar producción, pgweb es una delicia. Si manejas varios motores a la vez (por ejemplo, PostgreSQL para una app y MariaDB para otra) y necesitas editar datos, Adminer te da una única ventana para todos. Muchas infraestructuras acaban con los dos: Adminer como navaja suiza y pgweb como visor cómodo del PostgreSQL principal.
¿Cómo proteger estos paneles?
Esta es la parte que más gente pasa por alto y la más peligrosa. Ni Adminer ni pgweb añaden una capa de autenticación propia: quien llega a la URL puede intentar entrar con cualquier credencial de base de datos. Publicarlos abiertos en Internet es una invitación a los escáneres automáticos. Hay tres medidas que conviene combinar.
La primera, ya aplicada en el docker-compose.yml, es atar los puertos a 127.0.0.1 para que los paneles solo respondan en la propia máquina; desde tu portátil accedes con un túnel SSH (ssh -L 8080:localhost:8080 usuario@servidor) y nadie más los ve. La segunda es no publicar puertos en absoluto y dejar que las herramientas hablen con la base de datos por la red interna de Docker, exponiéndolas únicamente detrás de un proxy inverso. La tercera, si necesitas acceso web permanente, es poner ese proxy a exigir inicio de sesión: lo más sólido es un proxy con SSO como Authentik, que pide autenticación antes de dejar pasar a Adminer. Para pgweb, el modo --readonly es una red de seguridad adicional: aunque alguien acceda, no podrá alterar datos. Y recuerda instalar el motor Docker desde una base sólida siguiendo la guía para instalar Docker en Ubuntu 24.04.
Preguntas frecuentes
¿Puedo usar Adminer con MySQL y MariaDB además de PostgreSQL?
Sí, y es precisamente su punto fuerte. La imagen oficial adminer conecta con MySQL, MariaDB, PostgreSQL, SQLite, MS SQL, Oracle, Elasticsearch y MongoDB desde el mismo contenedor. Solo tienes que elegir el sistema en la pantalla de inicio de sesión y escribir el nombre del servicio del contenedor de la base de datos como servidor. pgweb, en cambio, es exclusivo de PostgreSQL.
¿Por qué no debo dejar la etiqueta latest en producción?
Porque :latest puede llevarte sin avisar a una versión mayor durante un simple reinicio y romper algo. Al fijar adminer:5.4.2 y sosedoff/pgweb:0.17.0 sabes exactamente qué código ejecutas y decides tú cuándo actualizar. Es la misma regla que aplicas a la base de datos: versiones fijadas y actualizaciones controladas.
¿pgweb permite modificar datos o solo leerlos?
Depende de cómo lo arranques. Sin argumentos, pgweb permite ejecutar cualquier consulta, incluidas escrituras. En el docker-compose.yml de esta guía se lanza con el argumento --readonly, que activa transacciones de solo lectura: ideal para inspeccionar una base de datos de producción sin riesgo de cambiar nada por error.
Conclusión
Con un único docker-compose.yml tienes dos formas complementarias de mirar tus bases de datos desde el navegador: Adminer, la navaja suiza multimotor de un solo archivo, y pgweb, el explorador ligero y de solo lectura para PostgreSQL. La clave está en levantarlos con cabeza: puertos atados a 127.0.0.1, red interna de Docker y, si necesitas acceso permanente, un proxy con autenticación por delante. A partir de ahí, gestionar tus datos deja de requerir una terminal y se convierte en abrir una pestaña.
Fuentes
- Imagen oficial de Adminer en Docker Hub
- Sitio oficial del proyecto Adminer
- Repositorio de pgweb en GitHub (sosedoff/pgweb)
Ruta: Bases de datos y almacenamiento self-hosted con Docker