MongoDB en Docker: acceso, roles y datos persistentes

Índice de contenido
  1. Prepara secreto y volumen
  2. Ejecuta la base
  3. Crea una cuenta limitada
  4. Prueba documentos
  5. Redes y persistencia
  6. Backup y restauración
  7. Preguntas frecuentes
    1. ¿El usuario root de inicialización sirve para la app?
    2. ¿Por qué falla authSource=admin con mi usuario?
    3. ¿Un contenedor con volumen ya tiene backup?
  8. En pocas palabras
  9. Conclusión
  10. Fuentes y documentación

MongoDB en Docker permite practicar una base documental con autenticación y datos persistentes. Este ejemplo utiliza la imagen oficial mongo de la familia 8.0 y evita publicar un puerto: las primeras comprobaciones se realizan desde dentro del contenedor.

Comprueba arquitectura y soporte de la versión antes de utilizarla. El diseño es de laboratorio y no constituye un replica set ni una plataforma de alta disponibilidad.

Prepara secreto y volumen

mkdir -p mongo-lab/secrets
cd mongo-lab
umask 077
openssl rand -base64 32 > secrets/admin.txt
printf 'secrets/\n*.archive\n' > .gitignore
docker volume create mongo_lab_data

Protege el secreto y sus copias. Las variables de inicialización se aplican a un directorio vacío; cambiar el archivo después no rota automáticamente una cuenta existente.

Ejecuta la base

docker run -d --name mongo-lab \
  -v mongo_lab_data:/data/db \
  --mount type=bind,src="$PWD/secrets",dst=/run/secrets,readonly \
  -e MONGO_INITDB_ROOT_USERNAME=admin_lab \
  -e MONGO_INITDB_ROOT_PASSWORD_FILE=/run/secrets/admin.txt \
  mongo:8.0
docker logs --tail 40 mongo-lab
docker exec -it mongo-lab mongosh \
  --username admin_lab --authenticationDatabase admin --password

Introduce la contraseña cuando se solicite. La cuenta de inicialización administra la instancia; utiliza otra para la aplicación.

Crea una cuenta limitada

Desde mongosh, cambia a la base de laboratorio y crea un usuario con una contraseña propia mediante el prompt:

use demo
db.createUser({
  user: "app_lab",
  pwd: passwordPrompt(),
  roles: [{role: "readWrite", db: "demo"}]
})

La base de autenticación de esta cuenta es demo, no admin. Confundir authSource es una causa frecuente de errores al formar la cadena de conexión.

Prueba documentos

Conecta con la cuenta app_lab y comprueba:

db.notas.insertOne({texto: "Prueba local", estado: "borrador"})
db.notas.find({estado: "borrador"})

Una estructura flexible no significa que la aplicación deba aceptar cualquier dato. Valida campos y reglas, y crea índices según consultas reales, no por intuición.

Redes y persistencia

Una aplicación en otro contenedor necesita una red compartida y el nombre del servicio correcto. No uses localhost esperando llegar a MongoDB de otro contenedor.

Reinicia la instancia y consulta los documentos. El volumen conserva datos, pero no los protege de borrado, corrupción o pérdida del host.

Backup y restauración

Utiliza mongodump y mongorestore con versiones y opciones compatibles. Revisa permisos, alcance y consistencia del respaldo para tu topología.

Prueba una copia de la base demo en otra instancia. No restaures sobre la única base importante para demostrar que “funciona”. Protege archivos de exportación porque contienen datos de la aplicación.

Antes de actualizar, consulta compatibilidad y características de la versión. Cambiar una etiqueta mayor sin procedimiento puede hacer que el volumen ya no sea utilizable por la instalación anterior.

Preguntas frecuentes

¿El usuario root de inicialización sirve para la app?

Puede tener más privilegios de los necesarios. Crea roles ajustados a la base y a las operaciones de la aplicación.

¿Por qué falla authSource=admin con mi usuario?

La cuenta puede haberse creado en otra base de autenticación. Comprueba dónde existe y qué permisos tiene.

¿Un contenedor con volumen ya tiene backup?

No. Necesitas una copia independiente y un procedimiento de recuperación comprobado.

En pocas palabras

MongoDB necesita autenticación, roles y almacenamiento adecuados también cuando corre en Docker. El usuario administrativo de inicialización no debe convertirse en la cuenta habitual de cada aplicación.

Conclusión

Verifica operaciones con una cuenta limitada y ensaya recuperación en otro entorno. Mantén secretos y versiones documentados y revisa compatibilidad antes de cambiar la imagen.

Para continuar, revisa Docker: qué es y cómo usarlo para ejecutar contenedores y Cómo instalar Docker en Ubuntu 24.04: guía práctica paso a paso.

Fuentes y documentación

Documentación de www.mongodb.com.

Documentación de www.mongodb.com.

Subir

Descubre más de Sergio Caballero

Suscríbete ahora para seguir leyendo y obtener acceso al archivo completo.

Continuar leyendo