docker-compose mongodb свежий экземпляр не работает - PullRequest
1 голос
/ 22 октября 2019

Попытка вызвать docker-compose с помощью следующего:

    version: '3.1'

    services:
      mongo:
        image: mongo
        container_name: mongo-db
        networks:
          - mongo
        restart: always
        environment:
          MONGO_INITDB_ROOT_USERNAME: ${MONGO_ROOT_USER}
          MONGO_INITDB_ROOT_PASSWORD: ${MONGO_ROOT_PASSWORD}
          MONGO_INITDB_DATABASE: ${MONGO_INITDB_DATABASE}
        ports:
          - 27017:27017
        volumes:
          - ./mongo-init.js:/docker-entrypoint-initdb.d/mongo-init.js:ro
      mongo-express:
        image: mongo-express:latest
        container_name: mongo-express
        restart: always
        networks:
          - mongo
        depends_on:
          - mongo
        ports:
          - 8081:8081
        environment:
          ME_CONFIG_MONGODB_SERVER: mongo
          ME_CONFIG_MONGODB_PORT: 27017
          ME_CONFIG_MONGODB_ADMINUSERNAME: ${MONGO_ROOT_USER}
          ME_CONFIG_MONGODB_ADMINPASSWORD: ${MONGO_ROOT_PASSWORD}

Файл точки входа js, как показано ниже:

db.createUser(
    {
        user: "dba",
        pwd: "dba",
        roles: [
            {
                role: "readWrite",
                db: "mydb"
            }
        ]
    }
);

Переменные определены в файле .env, как показано ниже:

MONGO_ROOT_USER=root
MONGO_ROOT_PASSWORD=root
MONGO_INITDB_DATABASE=mydb
MONGOEXPRESS_LOGIN=dev
MONGOEXPRESS_PASSWORD=dev

Когда я захожу в mongo-express, я не вижу пользователя или базы данных, созданной mongo-init.js. Кроме того, я не могу войти, если я пытаюсь подключиться с использованием:

docker exec -it mongo-db mongo --username dba

Однако, если я использую следующее, я могу подключиться, но все равно не вижу mydb при запуске show dbs:

docker exec -it mongo-db mongo --username root

Что здесь происходит?

Спасибо заранее

1 Ответ

0 голосов
/ 22 октября 2019

Я думаю, вам нужно изменить env на:

MONGO_INITDB_ROOT_USERNAME  
MONGO_INITDB_ROOT_PASSWORD

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

см. Документы

другое примечание:

если вы не вставите данные в файлы JavaScript, база данных не будет создана.

MONGO_INITDB_DATABASE

Эта переменная позволяет вамуказать имя базы данных, которая будет использоваться для создания сценариев, в /docker-entrypoint-initdb.d/*.js (см. Инициализация свежего экземпляра ниже). MongoDB изначально разработан для «создания при первом использовании», поэтому, если вы не вставляете данные в файлы JavaScript, база данных не создается.

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