Mongodb с docker -композицией - создать пользователя - PullRequest
1 голос
/ 31 марта 2020

Это мой docker -compose.yaml:

version: "2.0"
services:
  mongo_container:
    image: mongo:latest
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: example
      MONGO_INITDB_DATABASE: testdb
    ports:
      - "27017:27017"
    volumes:
      - ./mongodata:/data/db

И это в моей весенней конфигурации:

spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
spring.data.mongodb.username=root
spring.data.mongodb.password=example
spring.data.mongodb.database=testdb

Но каждый раз, когда я пытаюсь подключить мое приложение к Mon go В консоли Docker появляется следующая ошибка:

mongo_container_1  | 2020-03-31T07:37:24.803+0000 I  ACCESS   [conn2] SASL SCRAM-SHA-1 authentication failed for root on testdb from client 172.29.0.1:36628 ; UserNotFound: Could not find user "root" for db "testdb"

Что я делаю не так? Я попытался удалить все контейнеры с docker system prune и запустить его снова, но он по-прежнему выдает ту же ошибку.

1 Ответ

2 голосов
/ 01 апреля 2020

Вам необходимо добавить следующую строку в ваш application.properties:

spring.data.mongodb.authentication-database=admin

From docker -hub mongodb readme :

MONGO_INITDB_ROOT_USERNAME , MONGO_INITDB_ROOT_PASSWORD

Эти переменные, используемые вместе, создают нового пользователя и устанавливают пароль этого пользователя. Этот пользователь создан в базе данных аутентификации администратора и ему назначена роль root, которая является ролью «суперпользователя».

И для базы данных:

MONGO_INITDB_DATABASE Эта переменная позволяет вам указать имя базы данных, которая будет использоваться для создания сценариев в /docker-entrypoint-initdb.d/*.js ... MongoDB в основном предназначен для "create on сначала используйте ", , поэтому, если вы не вставляете данные с файлами JavaScript, база данных не создается.

В MongoDB, когда аутентификация включена, вы всегда проводите аутентификацию против определенную базу данных (по умолчанию администратор), затем подключите и используйте другую. Вот почему есть два разных свойства: аутентификация-база данных (для аутентификации на основе) и база данных (та, которую нужно использовать)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...