Создать новый пользователь для MongoDB внутри Docker

Я использую образ Docker MongoDB по умолчанию и пытаюсь создать нового пользователя для база данных.

Сейчас я пытаюсь сделать это следующим образом:

FROM docker.io/mongo:3.2

MAINTAINER <alexandernst> alexandernst@gmail.com

ADD create_ddbb.js /tmp/

RUN mongod --fork --logpath /var/log/mongodb.log \
    && sleep 5 && mongo foobar /tmp/create_ddbb.js 

И create_ddbb.js :

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

И когда я создаю Dockerfile, я вижу:

Step 4 : RUN mongod --fork --logpath /var/log/mongodb.log       && sleep 5 && mongo foobar /tmp/create_ddbb.js
 ---> Running in 58ba44d02508
about to fork child process, waiting until server is ready for connections.
forked process: 9
child process started successfully, parent exiting
MongoDB shell version: 3.2.6
connecting to: foobar
Successfully added user: {
        "user" : "***********",
        "roles" : [
                {
                        "role" : "readWrite",
                        "db" : "foobar"
                }
        ]
}
 ---> e73b6c8c8b83
Removing intermediate container 58ba44d02508
Successfully built e73b6c8c8b83

Итак, пользователь создан, но затем, когда я пытаюсь подключиться, я получаю:

mongo_1  | 2016-05-13T17:44:02.159+0000 I NETWORK  [initandlisten] connection accepted from 172.20.0.4:41294 #1 (1 connection now open)
mongo_1  | 2016-05-13T17:44:02.160+0000 I ACCESS   [conn1] SCRAM-SHA-1 authentication failed for ********* on foobar from client 172.20.0.4 ; UserNotFound: Could not find user *********@foobar
mongo_1  | 2016-05-13T17:44:02.160+0000 I NETWORK  [conn1] end connection 172.20.0.4:41294 (0 connections now open)

Почему это происходит? Как я могу сохранить созданного пользователя?

7
задан 13 May 2016 в 20:58
4 ответа

Мое решение:

Внутри вашего Dockerfile :

ADD create_ddbb.js /tmp/

RUN mongod -f /etc/mongod.conf --fork --logpath /var/log/mongodb.log \
    && sleep 5 \
    && mongo <YOUR DATABASE> /tmp/create_ddbb.js

Внутри create_ddbb.js :

db.createUser(
    {
      user: "your_user",
      pwd: "********************",
      roles: [
         { role: "dbOwner", db: "your_database" }
      ]
    }
,
    {
        w: "majority",
        wtimeout: 5000
    }
);
db.createCollection("test");

createColleciton ( "тест") в конце чрезвычайно важен. Без этого createUser не применяется. Не знаю почему, извините.

5
ответ дан 2 December 2019 в 23:40

пользователь должен быть добавлен в базу данных администратора следующим образом: ЗАПУСТИТЬ mongod --fork --logpath /var/log/mongodb.log \ && sleep 5 && mongo foobar /tmp/create_ddbb.js[12102 impression

1
ответ дан 2 December 2019 в 23:40

Я не смог запустить решение @alexandernst. В сочетании с https://github.com/docker-library/mongo/issues/329 мне просто нужно было создать свой Dockerfile, и он изнашивался.

FROM docker.io/mongo:latest
COPY create_ddbb.js /docker-entrypoint-initdb.d/

Файл create_ddbb.js был похож на файл @alexandernst, но без последней строки, создающей тестовую коллекцию.

0
ответ дан 30 May 2020 в 11:28

Я не использовал Dockerfile. Вместо этого я использовал docker-compose.yml для указания контейнера. Ниже приведено содержимое docker-compose.yml

version: "3.7"
services:
  mongo:
    container_name: container-mongodb
    image: mongo:latest
    restart: always
    ports:
      - 27017:27017

    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: password
      MONGO_INITDB_DATABASE: root-db

    volumes:
      - ./docker-entrypoint-initdb.d/mongo-init.js:/docker-entrypoint-initdb.d/mongo-init.js:ro
 

Создайте каталог docker-entrypoint-initdb.dи создайте файл mongo-init.js. и введите приведенный ниже код, чтобы добавить пользователя.

print("Started adding the users.");
db = db.getSiblingDB("admin");
db.createUser({
  user: "userx",
  pwd: "1234",
  roles: [{ role: "readWrite", db: "admin" }],
});
print("End adding the user roles.");

Затем запустите docker compose из каталога, в котором вы сохранили docker compose.yml. Дерево файлов должно выглядеть следующим образом:

project-directory
 ┣ docker-entrypoint-initdb.d
 ┃ ┗ mongo-init.js
 ┗ docker-compose.yaml

Проверьте наличие журналов, если вы столкнулись с какими-либо ошибками.

0
ответ дан 6 December 2021 в 09:48

Теги

Похожие вопросы