es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

No se puede escribir en la instancia de mongo que se ejecuta como un contenedor de Singularidad.

He estado siguiendo el repositorio: https://github.com/singularityhub/mongo para construir un contenedor mongo utilizando Singularity.

Siguiendo todos los pasos mencionados en el repositorio:

git clone https://www.github.com/singularityhub/mongo
cd mongo
sudo singularity build mongo.sif Singularity
mkdir data/db
singularity run --bind $PWD/data/db:/data/db mongo.sif --auth

Puedo ejecutar el contenedor con éxito.

Ahora, usando pymongo puedo conectarme a la instancia de MongoDB:

from pymongo import MongoClient
client = MongoClient("mongodb://127.0.0.1:27017")
t = client['temp_db3']
print(client.list_database_names()) ### esto devuelve una lista vacía
c = t['temp_collection1']
c.insert_one({"data": '123'})

Cuando intento insertar algunos datos en la colección, obtengo el error de autorización:

Mensaje de error: “OperationFailure: not authorized on temp_db3 to execute command { insert: “temp_collection1”, ordered: true, lsid: { id: UUID(“206a6f86-2465-4740-a92e-2e36b65c70f4”) }, $db: “temp_db3”, $readPreference: { mode: “primary” } }, error completo: {‘ok’: 0.0, ‘errmsg’: ‘not authorized on temp_db3 to execute command { insert: “temp_collection1”, ordered: true, lsid: { id: UUID(“206a6f86-2465-4740-a92e-2e36b65c70f4”) }, $db: “temp_db3”, $readPreference: { mode: “primary” } }’, ‘code’: 13, ‘codeName’: ‘Unauthorized’}”

Captura de pantalla del error: https://user-images.githubusercontent.com/43536129/147574920-c30a533a-e535-4430-bd8c-0cec6d610819.png

¿Qué debo hacer para poder escribir en las colecciones de esta instancia de MongoDB que se está ejecutando como contenedor?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error sugiere que el usuario que ejecuta la operación de inserción no tiene los privilegios necesarios para escribir en la colección especificada en la base de datos “temp_db3”.

    Para resolver este problema, puedes crear un nuevo usuario en la base de datos “temp_db3” y otorgarle los privilegios necesarios. Puedes hacer esto conectándote a la instancia de MongoDB utilizando la consola de mongo:

    1. Inicia el contenedor y abre una nueva sesión de consola dentro del contenedor:
      singularity shell --bind $PWD/data/db:/data/db mongo.sif
      
    2. Inicia la instancia de MongoDB:
      mongod --auth
      
    3. Abre una nueva sesión de consola y conéctate a la instancia de MongoDB utilizando la consola de mongo:
      mongo --host localhost --port 27017 -u admin -p admin --authenticationDatabase admin
      
    4. Cambia a la base de datos “temp_db3”:
      use temp_db3
      
    5. Crea un nuevo usuario con privilegios de lectura y escritura en la colección “temp_collection1”:
      db.createUser({ user: "user1", pwd: "password123", roles: [ { role: "readWrite", db: "temp_db3" } ] })
      
    6. Sal de la consola de mongo y regresa a la sesión de consola anterior.
    7. Reinicia la instancia de MongoDB con la opción “–auth” y autentícate con el usuario recién creado:

      mongod --auth
      
      mongo --host localhost --port 27017 -u user1 -p password123 --authenticationDatabase temp_db3
      

    Ahora deberías poder insertar datos en la colección “temp_collection1” sin errores de autorización.

Comments are closed.