mayor - ¿Cómo crear un DB para el contenedor MongoDB en el inicio?
diferente en mongodb (2)
En caso de que alguien esté buscando cómo configurar MongoDB con autenticación usando docker-compose
, aquí hay una configuración de muestra que usa variables de entorno:
version: "3.3"
services:
db:
image: mongo
environment:
- MONGO_INITDB_ROOT_USERNAME=admin
- MONGO_INITDB_ROOT_PASSWORD=<YOUR_PASSWORD>
ports:
- "27017:27017"
Cuando ejecute docker-compose up
su instancia de mongo se ejecuta automáticamente con auth habilitado. Tendrás una base de datos de administrador con la contraseña dada.
Estoy trabajando con Docker y tengo una pila con PHP, MySQL, Apache y Redis. Necesito agregar MongoDB ahora, así que estaba verificando el archivo Dockerfile para la última versión y también el archivo docker-entrypoint.sh del MongoDB Dockerhub pero no pude encontrar una forma de configurar un DB predeterminado, usuario / contraseña de administrador y posiblemente auth método para el contenedor de un archivo docker-compose.yml
.
En MySQL puede configurar algunas variables ENV como por ejemplo:
db:
image: mysql:5.7
env_file: .env
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
Y esto configurará la base de datos y el usuario / contraseña como la contraseña de root
.
¿Hay alguna forma de lograr lo mismo con MongoDB? Alguien tiene alguna experiencia o solución?
La imagen oficial de mongo ha combinado un PR para incluir la funcionalidad para crear usuarios y bases de datos.
La inicialización de la base de datos se ejecutará cuando no haya nada poblado en el directorio /data/db
.
Configuración de usuario administrador
Las variables de entorno para controlar la configuración del usuario "raíz" son
-
MONGO_INITDB_ROOT_USERNAME
-
MONGO_INITDB_ROOT_PASSWORD
Ejemplo
docker run -d /
-e MONGO_INITDB_ROOT_USERNAME=admin /
-e MONGO_INITDB_ROOT_PASSWORD=password /
mongod
No necesita / no puede usar --auth
en la línea de comandos ya que el script docker entrypoint.sh lo agrega cuando existen las variables de entorno.
Otra configuración personalizada
El contenedor también proporciona una ruta para implementar scripts de configuración .js
o .sh
personalizados que se ejecutarán una vez en la inicialización de la base de datos. .js
scripts .js
se ejecutarán contra test
de manera predeterminada o MONGO_INITDB_DATABASE
si están definidos en el entorno.
COPY mysetup.sh /docker-entrypoint-initdb.d/
o
COPY mysetup.js /docker-entrypoint-initdb.d/
Un archivo javascript de inicialización simple que muestra el registro y cómo salir con un error (para la comprobación de resultados).
let error = true
let res = [
db.container.drop(),
db.container.drop(),
db.container.createIndex({ myfield: 1 }, { unique: true }),
db.container.createIndex({ thatfield: 1 }),
db.container.createIndex({ thatfield: 1 }),
db.container.insert({ myfield: ''hello'', thatfield: ''testing'' }),
db.container.insert({ myfield: ''hello2'', thatfield: ''testing'' }),
db.container.insert({ myfield: ''hello3'', thatfield: ''testing'' }),
db.container.insert({ myfield: ''hello3'', thatfield: ''testing'' }),
]
printjson(res)
if (error) {
print(''Error, exiting'')
quit(1)
}