Vic*_*ira 0 mongodb docker docker-compose docker-entrypoint
每个人,
我很难设置一个 MongoDB 容器来拥有 root 密码并自动创建一个权限较低的新用户(这将是我的应用程序用户)。
理想情况下,我应该只有一些脚本和 docker-compose 配置。
我尝试添加 MONGO_INITDB_ROOT_USERNAME 和 MONGO_INITDB_ROOT_PASSWORD 但它们似乎不起作用。他们做了一些事情,因为当我像这样启动容器时,我不能只连接到 mongo shell 并运行所有命令(并且传递用户名和密码将引发未经授权的错误)。
然后我考虑添加一个脚本,/docker-entrypoint-initdb.d/
但它们似乎没有运行。它们不会显示在控制台上。此外,我只是放了一个像这样的JavaScript,我不确定它们是否会工作:
var db = connect("mongodb://localhost/admin");
db.createRole(
{
role: "somerole",
privileges: [
{
actions: [ "find", "update", "insert" ],
resource: { db: "mydb", collection: "" } <--- does it means all colections od database mydb?!?!
}
],
roles: [ ]
}
)
db.createUser(
{
user: "admin",
pwd: "adminpass",
roles: [ { role: "userAdminAnyDatabase", db: "mydb" } ]
}
)
db.createUser(
{
user: "system",
pwd: "systempass",
roles: [ { role: "somerole", db: "mydb" } ]
}
)
Run Code Online (Sandbox Code Playgroud)
我还想创建集合并插入文档。我们该怎么做呢?不应该是有入口点的吗!?
小智 5
1)创建以下文件结构:
2)docker-compose.yml的内容
version: "3"
services:
mongodb:
image: "mongo:4.1.1-xenial"
restart: "unless-stopped"
env_file:
- ".env"
ports:
- "27017:27017"
volumes:
- "./database/data:/data/db" # Database files
- "./database/fixtures:/docker-entrypoint-initdb.d" # To create Db at start
Run Code Online (Sandbox Code Playgroud)
3)default.js的内容
/* Create a New user with "only READ" role */
db = db.getSiblingDB('admin');
db.createUser(
{
"user": "John",
"pwd": "MyPassword",
"roles": [
{ "role": "read", "db": "data" }
]
})
/* Misc - Other Data */
db = db.getSiblingDB('data');
db.data.save([
{
"name": "Frank",
"email": "email1@gmail.com",
},
{
"name": "Peter",
"email": "email2@gmail.com",
}
]);
Run Code Online (Sandbox Code Playgroud)
4).env的内容
MONGO_INITDB_ROOT_USERNAME=Robert
MONGO_INITDB_ROOT_PASSWORD=GoodPassword
Run Code Online (Sandbox Code Playgroud)
5) 转到终端并在 docker-compose.yml 文件级别执行:sudo docker-compose up -d
6)获取容器名称:
执行:sudo docker ps a
7)进入容器内部:
执行:sudo docker exec -it <CONTAINER NAME> bash
8)容器内部:
执行:mongo --host localhost -u Robert -p GoodPassword --authenticationDatabase admin
注意:考虑到我们正在指定“身份验证数据库”
9)选择数据库:
执行:use admin
10)显示用户(必须找到两个用户Robert和John):
执行:show users
正如您所看到的“data”目录中存储了数据库的文件。
使用 default.js 文件,您可以从一开始就创建集合。
重要提示:如果您进行了一些更改并且这些更改没有反映到数据库中,那么您需要删除“data”的内容并再次运行:docker-compose up -d
可以说,如果“data”目录不为空,则“default.js”文件将不会被考虑在内。
归档时间: |
|
查看次数: |
3323 次 |
最近记录: |