Ошибка аутентификации MongoDb при доступе к базе данных при использовании docker? - PullRequest
0 голосов
/ 16 июня 2020

Я пытался установить пароль для mongodb

Мой файл docker -compose равен

version: "3"
services:
    mongo:
        image: mongo
        ports:
            - "27016:27017"
        volumes:
            - ./data:/data/db
        environment:
            - MONGO_INITDB_ROOT_USERNAME=root
            - MONGO_INITDB_ROOT_PASSWORD=password
            - MONG_INITDB_DATABASE=example

Теперь после запуска контейнера docker, когда я пытаюсь после входа в контейнер

mongo mongodb://root:password@localhost:27017

Он успешно подключается,

Версия оболочки MongoDB v4.2.7 подключается к: mongodb: // localhost: 27017 /? compressors = disabled & gssapiServiceName = mongodb Неявный сеанс: сеанс {"id": UUID ("71ec853d-3a05-4367-aa9f-d0a69217fb7d")} Версия сервера MongoDB: 4.2.7 Сервер имеет предупреждения при запуске: 2020-06-16T17: 43: 51.837 + 0000 I ХРАНЕНИЕ [ initandlisten] 2020-06-16T17: 43: 51.837 + 0000 I ХРАНИЛИЩЕ [initandlisten] ** ПРЕДУПРЕЖДЕНИЕ: настоятельно рекомендуется использовать файловую систему XFS с механизмом хранения WiredTiger 2020-06-16T17: 43: 51.837 + 0000 I STORAGE [initandlisten] ** См.

, но когда я пытаюсь

mongo mongodb://root:password@localhost:27017/example

аутентификация не выполняется. Версия оболочки MongoDB v4.2.7 при подключении к: mongodb: // localhost: 27017 / example? Compressors = disabled & gssapiServiceName = mongodb 2020-06-16T17: 51: 08.226 + 0000 E QUERY [js] Ошибка: ошибка аутентификации. : connect@src/mongo/shell/mongo.js: 341: 17

То же самое, когда я пытаюсь получить доступ извне с помощью приложения узла. (Запуск приложения узла также с использованием docker -compose)

mon go mongodb: // root:password@mongo: 27017 / example

Ответы [ 3 ]

1 голос
/ 16 июня 2020

Не уверен, почему это не было упомянуто ни в одном блоге или учебном пособии, но согласно официальной документации, https://docs.mongodb.com/manual/reference/connection-string/#components

/defaultauthdb  
Optional. The authentication database to use if the connection string includes username:password@ authentication credentials but the authSource option is unspecified.

If both authSource and defaultauthdb are unspecified, the client will attempt to authenticate the specified user to the admin database.

Итак, что наконец сработало, так это добавление authSource без authSource mongod пытается найти кредиты в / example db, что приводит к ошибке после добавления authSource

mongodb://root:password@localhost:27016/example?authSource=admin

Это сработало и успешно добавило данные в пример db

1 голос
/ 16 июня 2020

Вам следует попытаться подключиться к mongodb://root:password@localhost:27016/example извне контейнера, поскольку вы сопоставили порт 27017 вашего docker контейнера с портом 27016 вашего хоста.

0 голосов
/ 16 июня 2020

Две вещи, на которые следует обратить внимание:

  1. «MONG_INITDB_DATABASE» не будет создавать БД, если она не присутствует в привязке вашего тома данных, т.е. «./data:/data/db». Если он есть, то вам нужно использовать определенные c роли, которые использовались для создания в разделе «данные»
  2. Если это не № 1, вам необходимо предоставить файл, который будет создавать базу данных под /docker-entrypoint-initdb.d/*.js. Ниже представлен шаблон:

    db.createUser(
        {
            user: "<user for database which shall be created>",
            pwd: "<password of user>",
            roles: [
                {
                    role: "readWrite",
                    db: "<database to create>"
                }
            ]
        }
    

    );

Вы можете обратиться к их официальному docker образу хаба . Раздел: MONGO_INITDB_DATABASE и Инициализация экземпляра fre sh

...