Создать базу данных и пользователя в официальном образе mongoDB - PullRequest
0 голосов
/ 16 сентября 2018

Я хочу, чтобы служба MongoDB работала в Docker для обслуживания приложения Flask.Я попытался создать контейнер, используя docker-compose.yml:

my_mongo_service:
  image: mongo
  environment:
      - MONGO_INITDB_ROOT_USERNAME=${MONGO_ROOT_USER}
      - MONGO_INITDB_ROOT_PASSWORD=${MONGO_ROOT_PASSWORD}
      - MONGO_INITDB_DATABASE=${MY_DATABASE_NAME}
  ports:
    - "27017:27017"
  volumes:
    - "/data/db:/data/db"
  command: mongod

Представьте, что у нас есть файл .env, подобный этому:

MONGO_ROOT_USER=my_fancy_username
MONGO_ROOT_PASSWORD=my_fancy_password
MY_DATABASE_NAME=my_fancy_database

Что я ожидал (читая документ ) состоит в том, что база данных, соответствующая значению MY_DATABASE_NAME, создана, и пользователь, соответствующий MONGO_ROOT_USER, также создан, и я мог аутентифицироваться с парой (MONGO_ROOT_USER, MONGO_ROOT_PASSWORD).

Хорошо, я запускаю свой контейнер с docker-compose up и захожу на него с docker exec -it <container-id> bash.Я кладу mongo на консоль, и когда я пытаюсь аутентифицироваться, она падает:

> use my_fancy_database
switched to db my_fancy_database
> db.auth('my_fancy_username','my_fancy_password')
Error: Authentication failed.
0 

В журнале я вижу следующую ошибку:

[...] authentication failed for my_fancy_username on my_fancy_database from client [...] ; UserNotFound: Could not find user my_fancy_username@my_fancy_database

docker-compose.ymlКонфигурация (как было опубликовано в официальной документации) не работает.Что я делаю не так?

Заранее спасибо.

1 Ответ

0 голосов
/ 16 сентября 2018

Я не понимаю. Используете ли вы переменные среды, которых нет в среде? Это так выглядит.

Если вы введете echo $MY_DATABASE_NAME в своем терминале и увидите пустой вывод, то вот ответ на ваш вопрос. Сначала вы должны определить переменную с помощью export (или source для файла) или переопределить вашу docker-compose.yml.

Для этого лучше всего использовать директиву env_file:

my_mongo_service:
  image: mongo
  env_file:
      - .env
  ports:
    - "27017:27017"
  volumes:
    - "/data/db:/data/db"

И установите .env так:

MONGO_INITDB_ROOT_USERNAME=my_fancy_username
MONGO_INITDB_ROOT_PASSWORD=my_fancy_password
MONGO_INITDB_DATABASE=my_fancy_database

Примечание: использование command: mongod не обязательно, базовое изображение уже использует его.

...