您将如何编写Dockerfile脚本以为mongoDB 4.2创建管理员用户?
是否有一个命令行命令可以创建不使用交互式子外壳的管理员用户? (在mongoDB documentation中看不到任何内容)
感谢您的帮助。
传递MONGO_INITDB_ROOT_USERNAME和MONGO_INITDB_ROOT_PASSWORD不再起作用(已从Docker集线器mongo映像documentation中删除。
[mongo Docker中心文档仅显示交互式shell管理员用户的创建。
> mongo admin
执行mongo交互式shell,但您如何编写shell脚本以从顶级shell在该子shell中输入命令?
FROM mongo
RUN mongo admin ???? db.createUser({ user: 'jsmith', pwd: 'some-initial-password', roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] });
docker构建过程应显示:
成功添加的用户:{“ user”:“ jsmith”,“角色”:[{“ role”:“ userAdminAnyDatabase”,“ db”:“ admin”}]}
我找到了方法!
sudo docker exec -it MONGO_CONTAINER mongo admin
use admin
db.createUser(
{
user: "myUserAdmin",
pwd: passwordPrompt(), // or cleartext password
roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
}
)
db.createUser({
user: "toto",
pwd: "123",
roles: [
{
role: "readWrite",
db: "tube"
}
]
});
mongoose.connect(
"mongodb://localhost:27017/tube?authSource=admin",
{
useNewUrlParser: true,
useUnifiedTopology: true,
auth: {
user: "toto",
password: "123"
}
}
);
我尝试将以下init.js文件放入Dockerfile的/docker-entrypoint-initdb.d
中:
init.js:
db.createUser(
{
user: "myUserAdmin",
pwd: passwordPrompt(), // or cleartext password
roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
}
)
Dockerfile:
FROM mongo
COPY ./db/init.js ./docker-entrypoint-initdb.d
运行图像时创建了用户,但无法连接。
[确定,这是通过Dockerfile添加认证的方法。
init.js
文件:db = new Mongo().getDB("admin");
// create admin user
db.createUser({
user: "admin",
pwd: "password",
roles: [
{
role: "userAdminAnyDatabase",
db: "admin"
}
]
});
// create non admin user
db.createUser({
user: "toto",
pwd: "123",
roles: [
{
role: "readWrite",
db: "tube"
}
]
});
FROM mongo
# init.js will be executed when the mongo instance runs
COPY ./init.js ./docker-entrypoint-initdb.d
docker build -t mongoAuth .
docker run --name mongoContainer -p 27017:27017 mongoAuth
我在上一个答案中缺少的是,我没有通过使用以下命令来设置用于创建用户的数据库(管理数据库):
db = new Mongo().getDB("admin");