Каков наилучший способ создания (или нет) пользователей в контейнере mongodb? - PullRequest
0 голосов
/ 24 сентября 2019

Я устанавливаю контейнер mongodb, используя docker, и сохраняю данные и регистрирую тома, сопоставленные с хостом.Основная идея состоит в том, чтобы создать контейнер mongodb, сохраняющий данные.

Но проблема в том, что я хочу создать пользователя-администратора mongodb и пользователя базы данных (с меньшими разрешениями) во время запуска контейнера, и есликонтейнер перезапускается, и пользователям не нужно будет снова создавать его после сохранения данных.

Что касается создания контейнера mongodb, я нашел много ответов в stackoverflow и создал Dockerfile, docker-compose.yml и mongodb.conf.Работало нормально.

Но я не нашел четкого решения, связанного с созданием пользователей.Существует несколько кодов JavaScript, которые можно использовать для создания пользователей в mongodb во время инициализации контейнеров.Но не ясно, что происходит (или должно происходить) со сценариями после того, как пользователи были созданы при перезапуске контейнера, чтобы избежать повторного создания пользователями контейнера.

Dockerfile

    FROM ubuntu:latest

    RUN apt-get update && \
    apt-get install -qq -y curl wget gnupg gnupg2

    RUN wget -qO - https://www.mongodb.org/static/pgp/server-4.2.asc | 
    apt-key add -

    RUN echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu 
    bionic/mongodb-org/4.2 multiverse" | tee 
    /etc/apt/sources.list.d/mongodb-org-4.2.list

    RUN apt-get update && \
    apt-get install -y mongodb-org && \
    apt-get autoclean && \
    apt-get clean

    ADD mongodb.conf /etc/mongodb.conf

    ENTRYPOINT ["/usr/bin/mongod", "--config", "/etc/mongodb.conf"]
    CMD ["--quiet"]

docker-compose.yml

    version: '3'
    services:
       mongo:
          build: .
          container_name: mongodb
          image: mongodb_img
          environment:
             - MONGODB_USER="${MONGODB_USER}"
             - MONGODB_PASS="${MONGODB_PASS}"
             - MONGODB_DB="${MONGODB_DB}"
             - MONGODB_ADMIN="${MONGODB_ADMIN}"
             - MONGODB_ADMIN_PASS="${MONGODB_ADMIN_PASS}"
          ports:
             - 27017:27017
          volumes:
             - /data/db/:/var/lib/mongodb/
             - /data/logs/:/var/log/mongodb/

В настоящее время он запускает контейнер mongodb без пользователей и без аутентификации, сопоставляя данные и журналы, соответственно, в тома / data / db и / data / logs.

Я хочу, чтобы контейнер запускался с правами администратора, определенной базы данных, пользователя базы данных и аутентификации.Если контейнер перезапускает пользователей, и базу данных создавать не нужно, поскольку данные сохраняются.

1 Ответ

0 голосов
/ 24 сентября 2019

Я сделал некоторые изменения в файлах docker-compose.yml и mongodb.conf и создал два сценария для создания пользователей с правами администратора и базы данных.На данный момент он работает, как я и ожидал.

Я надеюсь, что это может быть полезно для других, и если у кого-то есть другое решение, будем рады поделиться с нами.

docker-compose.yml


    version: '3'
    services:
       mongo:
          build: .
          container_name: mongodb
          image: mongodb_img
          ports:
             - 27017:27017
          command: --auth
          volumes:
             - /data/db/:/var/lib/mongodb/
             - /data/logs/:/var/log/mongodb/
             - /data/setup/:/setup

mongodb.conf


    # mongod.conf

    # for documentation of all options, see:
    #   http://docs.mongodb.org/manual/reference/configuration-options/

    # Where and how to store data.
    storage:
      dbPath: /var/lib/mongodb
      journal:
        enabled: true

    # where to write logging data.
    systemLog:
      destination: file
      logAppend: true
      path: /var/log/mongodb/mongod.log

    # network interfaces
    net:
      port: 27017
      bindIp: 0.0.0.0

    security:
      authorization: "enabled"

setup / create-user.js


    db.createUser({
        user: "db_username",
        pwd: "db_user_password",
        roles: [
            {role: "readWrite", db:"db_name"}
        ]
    })

setup / create-admin.js


    db.createUser({
        user: "admin_user",
        pwd: "admin_password",
        roles: [
            {role: "userAdminAnyDatabase", db: "admin"},
            {role: "readWrite", db:"admin"}
        ]
    });

Для инициализации контейнера я использовал команду:


    docker-compose up -d --build

Поэтому для создания пользователей выполните следующие команды:


    docker exec mongodb mongo admin ./setup/create-admin.js

и


    docker exec mongodb mongo db_name ./setup/create-user.js -u admin_user -p admin_password --authenticationDatabase admin

...