إنشاء مستخدم جديد ل مونغودب داخل عامل الميناء

أنا باستخدام صورة مونغودب عامل الميناء الافتراضي وأنا أحاول إنشاء مستخدم جديد لقاعدة البيانات.

أحاول حاليا القيام بذلك بهذه الطريقة:

FROM docker.io/mongo:3.2MAINTAINER <alexandernst> alexandernst@gmail.comADD 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" }      ]    });

وعندما أقوم ببناء دوكيرفيل ، أرى:

Step 4 : RUN mongod --fork --logpath /var/log/mongodb.log       && sleep 5 && mongo foobar /tmp/create_ddbb.js ---> Running in 58ba44d02508about to fork child process, waiting until server is ready for connections.forked process: 9child process started successfully, parent exitingMongoDB shell version: 3.2.6connecting to: foobarSuccessfully added user: {        "user" : "***********",        "roles" : [                {                        "role" : "readWrite",                        "db" : "foobar"                }        ]} ---> e73b6c8c8b83Removing intermediate container 58ba44d02508Successfully 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 *********@foobarmongo_1  | 2016-05-13T17:44:02.160+0000 I NETWORK  [conn1] end connection 172.20.0.4:41294 (0 connections now open)

لماذا يحدث ذلك? كيف يمكنني الاستمرار على المستخدم الذي تم إنشاؤه?

الحل الخاص بي:

داخل الخاص بك 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("test") في النهاية مهم للغاية. بدون ذلك, ال createUser لم يتم تطبيقه. أنا لا أعرف لماذا بالضبط ، آسف.

يجب إضافة المستخدم في قاعدة بيانات المسؤول مثل هذا:RUN mongod --fork --logpath /var/log/mongodb.log \ && sleep 5 && mongo foobar /tmp/create_ddbb.js

لم أكن استخدام دوكيرفيل. بدلا من ذلك كنت عامل الميناء يؤلف.يمل لتحديد الحاوية.وفيما يلي محتوى عامل الميناء يؤلف.يمل

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.");

ثم قم بتشغيل عامل الميناء يؤلف من الدليل حيث كنت قد حافظت على عامل الميناء يؤلف.يمل.يجب أن تبدو شجرة الملفات كما يلي:

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

تحقق من السجلات إذا واجهت أي أخطاء.

لم أتمكن من جعل حل @ الكسندرنست تشغيل. بالاشتراك مع https://github.com/docker-library/mongo/issues/329 كان علي فقط إنشاء ملف الإرساء الخاص بي ، لذا فقد كان الأمر كذلك.

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

إنشاء.كان جس مماثلة ل @الكسندرنست، ولكن من دون السطر الأخير الذي خلق مجموعة اختبار.