gpt4 book ai didi

mongodb - Mongo Docker 不创建用户

转载 作者:可可西里 更新时间:2023-11-01 10:02:47 24 4
gpt4 key购买 nike

基本上我想在创建图像的同时创建用户。这样我就可以直接以授权模式启动我的容器。整个过程必须自动化。因此,我遵循了以下过程。

我正在使用 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 });

创建管理员用户.js

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

创建用户.js

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

创建图像时记录

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

当我启动容器并尝试登录时,mongo 抛出错误:找不到用户。

来自容器的错误日志

: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 文件中启用了授权。我在构建过程中将其复制到图像中。

security:
authorization: enabled

你能告诉我问题是什么吗?为什么用户没有反射(reflect)在容器中。还有其他方法吗。

最佳答案

您可以通过用您自己的指令覆盖 mongo:3.2 图像 CMD 指令并设置脚本在图像启动后运行来解决这个问题。您还可以创建一个 shell 脚本来运行容器,然后在容器启动后 docker exec 脚本。无论哪种方式 - 脚本都应该在运行时执行,而不是构建时。

关于mongodb - Mongo Docker 不创建用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40395306/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com