Mongo Docker没有创build用户

基本上我想在创build图像时创build用户。 所以,我可以直接启动我的容器auth模式。 整个过程必须自动化。 因此,我已经按照下面的过程。

我使用的是mongo docker office images 3.2。 我的docker文件

FROM mongo:3.2 MAINTAINER <name> <mail.com> LABEL description="Mongo installation." ADD Changeauthversion.js /home/script/ ADD createadminuser.js /home/script/ ADD createsavpuser.js /home/script/ RUN mongod --fork --logpath /var/log/mongodb.log \ && sleep 5 \ &&mongo <Databasename> /home/script/Changeauthversion.js \ && mongo <Databasename> /home/script/createadminuser.js \ && mongo <Databasename> /home/script/createuser.js \ && rm -r /tmp/mongodb-27017.sock \ && rm -r /etc/mongod.conf.orig ADD mongod.conf.orig /etc/ EXPOSE 5002 

Docker运行文件

 docker RUN -v mongoDb:/data/db -p 27018:27017 -p 28017:28017 --name mongodb1 -d platform_mongodb:v1 

Changeauthversion.js

 db.system.users.remove({}); db.system.version.remove({}); db.system.version.insert({ "_id" : "authSchema", "currentVersion" : 3 }); 

createadminuser.js

 db.createCollection("test"); db.createUser({ user: "user", pwd: "pwd", roles: [ { role: "userAdmin", db: "admin" }, { role: "userAdminAnyDatabase", db: "admin" }, ] }); 

createuser.js

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

在创build图像时logging日志

 about to fork child process, waiting until server is ready for connections. forked process: 7 child process started successfully, parent exiting MongoDB shell version: 3.2.10 connecting to: admin MongoDB shell version: 3.2.10 connecting to: admin Successfully added user: { "user" : "admin", "roles" : [ { "role" : "userAdmin", "db" : "admin" }, { "role" : "userAdminAnyDatabase", "db" : "admin" } ] } MongoDB shell version: 3.2.10 connecting to: database Successfully added user: { "user" : "user", "roles" : [ { "role" : "readWrite", "db" : "database" } ] } ---> 98538e078e6e Removing intermediate container 2ba4fbe3c493 Step 9 : ADD mongod.conf.orig /etc/ ---> d9d72e70cf3b Removing intermediate container 68d9c8d43ae8 Step 10 : EXPOSE 5002 ---> Running in c134feaec53c ---> 296888ad5d23 Removing intermediate container c134feaec53c Successfully built 296888ad5d23 

当我启动容器并尝试login时,mongo抛出一个错误:未find用户。

来自容器的错误日志

 :24:35.160+0000 I NETWORK [initandlisten] connection accepted from 10.0.2.2:49713 #2 (2 connections now open) :24:35.165+0000 I ACCESS [conn2] SCRAM-SHA-1 authentication failed for admin on admin from client 10.0.2.2 ; UserNotFound: Could not find user admin@admin 

我已经在mongo.conf文件中启用了授权。 在构build期间,我已将其复制到图像。

 security: authorization: enabled 

你能让我知道问题是什么。 为什么用户不在容器中反映? 还有另一种方法吗?

你可以通过重写mongo来解决这个问题:3.2用你自己的方式创buildCMD指令,并在脚本启动之后运行脚本。 您也可以创build一个shell脚本来运行容器,然后在容器启动后docker exec脚本。 无论哪种方式 – 脚本应该在运行时执行,而不是build立时间。

如何使用默认的集合和数据创build一个Mongo Docker镜像?

如果你通过这个链接。 它解释了docker在数量方面的行为。 这也解释了为什么数据不被持续。 我已经试过了上面的链接工程中显示的方法。