Docker Mongo Инициализация базы данных с правами администратора, работающего на некоторых компьютерах, но не на других - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть файл docker compose, который создает экземпляр mongo db и инициализирует его новым корневым именем пользователя и паролем с настройками конфигурации MONGO_INITDB_ROOT_USERNAME и MONGO_INITDB_ROOT_PASSWORD, аналогично принятому ответу в этом связанном вопросе SO.Как и ожидалось, это работает правильно на моей машине MacOSX Mojave - 10.14.5 с Docker Desktop 2.1.0.3.

Однако мы попытались заставить это работать на машине моего коллеги, но новый пользователь не был создан.Ожидаемое сообщение «Успешно добавленный пользователь» не появляется при запуске, и аутентификация завершается неудачно.Мы оба используем одну и ту же ОС и версию Docker Desktop.

Вопрос: Почему это работает на некоторых компьютерах, но не на других?Какие шаги я могу предпринять для устранения проблемы?

Я подумываю написать сценарий для создания пользователя-администратора и поместить его в docker-entrypoint-initdb.d.Однако в настройке Docker явно что-то не так, и я бы предпочел исследовать решение.

Ожидаемый результат (работает на моей машине, не работает на другой машине):

Successfully added user: {
  "user" : "example",
  "roles" : [
    {
      "role" : "root",
      "db" : "admin"
    }
  ]
}

docker-compose.yml

version: '3.5'

services:
  example:
    container_name: example
    image: mongo:3.6-xenial
    restart: unless-stopped
    env_file:
      - '/pathtoenv/.env'
    environment:
      - MONGO_INITDB_ROOT_USERNAME=${MONGO_USERNAME}
      - MONGO_INITDB_ROOT_PASSWORD=${MONGO_PASSWORD}
    ports:
      - "27017:27017"

.env

MONGO_USERNAME=example
MONGO_PASSWORD=password

ОБНОВЛЕНИЕ:

Я написал скрипт sh для создания пользователя.Сценарий монтируется в контейнер как том, и, поскольку он помещается в docker-entrypoint-initdb.d, он запускается автоматически.Я также прокомментировал MONGO_INITDB_ROOT_USERNAME и MONGO_INITDB_ROOT_PASSWORD - но мне все еще определенно очень любопытно, почему эти параметры конфигурации не работают на некоторых машинах.

docker-compose.yml

version: '3.5'

services:
  example:
    container_name: example
    image: mongo:3.6-xenial
    restart: unless-stopped
    env_file:
      - '/pathtoenv/.env'
    # Does not work on some machines only
    #environment:
      #- MONGO_INITDB_ROOT_USERNAME=${MONGO_USERNAME}
      #- MONGO_INITDB_ROOT_PASSWORD=${MONGO_PASSWORD}
    ports:
      - "27017:27017"
    volumes:
    # Workaround for MONGO_INITDB_ROOT_USERNAME not working on some machines
      - ./mongo/mongo-init:/docker-entrypoint-initdb.d

. / Mongo / mongo-init / mongo-init.sh

mongo -- "${MONGO_AUTH_SOURCE}" <<EOF
    db.createUser(
        {
          "user": "${MONGO_USERNAME}",
          "pwd": "${MONGO_PASSWORD}",
          "roles": [
            { "role": "root", "db": "${MONGO_AUTH_SOURCE}" },
          ]
        }
      );
EOF
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...