sql >> Base de Datos >  >> NoSQL >> MongoDB

MongoDB y Docker a través del error de autenticación docker-compose y no inicializando db

  • Para la parte de autenticación:¿ha intentado agregar --authenticationDatabase admin para poder iniciar sesión?
  • Con respecto a MONGO_INITDB_DATABASE no será efectivo a menos que tenga un script en /docker-entrypoint-initdb.d/ como se muestra en docker-entrypoiny .sh que se usa en la imagen mongodb para que pueda tener un script bash en docker-entrypoint-initdb.d/ dicho esto.

  • El uso del usuario raíz como propietario de la base de datos de su aplicación no es una cuestión de seguridad, ya que tendrá la capacidad de controlar todo en la instancia de mongodb.

    En mi humilde opinión, un mejor enfoque sería agregar variables adicionales como las siguientes:

    • MONGO_APPLICATION_DATABASE
    • MONGO_APPLICATION_USERNAME
    • MONGO_APPLICATION_PASSWORD

    Luego, agregue un script bash que creará el usuario y lo asignará a la base de datos mediante el uso de variables de entorno (debe montarlo en docker-entrypoint-initdb.d):

    # initmongo/setup.sh
    mongo admin -u $MONGO_INITDB_ROOT_USERNAME -p $MONGO_INITDB_ROOT_PASSWORD --eval "db.getSiblingDB('$MONGO_APPLICATION_DATABASE').createUser({user: '$MONGO_APPLICATION_USERNAME', pwd: '$MONGO_APPLICATION_PASSWORD', roles: [{role: 'readWrite', db: '$MONGO_APPLICATION_DATABASE'}]});"
    

    En docker-compose.yml agregue un volumen a su lista actual de volúmenes

    #docker-compose.yml
    volumes:
      - ".${MONGO_DATA_DIR}:${MONGO_DATA_DIR}"
      - "./initmongo/:/docker-entrypoint-initdb.d/"
    

    Y finalmente elimine esta variable MONGO_INITDB_DATABASE ya que no hay necesidad de ello

    Para iniciar sesión utilice el siguiente comando:

    docker exec -it container_name mongo -u "$MONGO_APPLICATION_USERNAME" -p "$MONGO_APPLICATION_PASSWORD" --authenticationDatabase "$MONGO_APPLICATION_DATABASE" "$MONGO_APPLICATION_DATABASE"
    
  • Para .env archivo no estoy seguro de qué podría causar este problema. ¿Tienes alguna advertencia mientras lo usas? También considere revisar este comentario o esto