我创建了一个带有附加 js 脚本的 mongo docker 容器:
ADD graylog.js /docker-entrypoint-initdb.d/graylog.js
该脚本创建两个用户:
root = db.getSiblingDB('root');
root.createUser(
{
user: "root",
pwd: "pass",
roles: [
{ role: "dbOwner", db: "admin" }
]
}
);
graylog = db.getSiblingDB('graylog');
graylog.createUser(
{
user: "graylog",
pwd: "vWGzncmBe9",
roles: [
{ role: "dbOwner", db: "graylog" }
]
}
);
不幸的是,即使只有一个用户(第一个),连接数据库并列出可用数据库也不起作用:
client = MongoClient('mongodb://root:pass@localhost:27017/')
client.list_database_names()
身份验证失败
事实上,在 mongo 服务器日志中,我看到root
无法登录。服务器graylog
也没有graylog
。
我用一个全新的/干净的卷做了这个,我可以确认设置MONGO_INITDB_ROOT_USERNAME
/MONGO_INITDB_ROOT_PASSWORD
确实允许列出数据库。
有关如何执行此操作的文档不是很清楚。mongoldb 3 可以允许 bth 环境变量和脚本,但现在,只有其中一个可以工作,而且只有在 mongo 没有初始化的情况下。
那么如何从这个脚本中设置用户呢?
编辑:
添加 mongo 启动日志:
2019-03-13T20:01:03.891+0000 I SHARDING [initandlisten] Marking collection local.system.replset as collection version: <unsharded>
2019-03-13T20:01:03.892+0000 I SHARDING [initandlisten] Marking collection admin.system.roles as collection version: <unsharded>
2019-03-13T20:01:03.892+0000 I SHARDING [initandlisten] Marking collection admin.system.version as collection version: <unsharded>
2019-03-13T20:01:03.893+0000 I SHARDING [initandlisten] Marking collection local.startup_log as collection version: <unsharded>
2019-03-13T20:01:03.893+0000 I FTDC [initandlisten] Initializing full-time diagnostic data capture with directory '/data/db/diagnostic.data'
2019-03-13T20:01:03.894+0000 I SHARDING [initandlisten] Marking collection admin.system.users as collection version: <unsharded>
2019-03-13T20:01:03.894+0000 I SHARDING [initandlisten] Marking collection config.system.sessions as collection version: <unsharded>
没有其他用户的迹象:(我想知道我以后是否应该手动执行这些操作!