我用一个附加的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
也不需要
灰阶
服务器。
我用一个全新的/干净的音量做了这个,我可以确认这个设置
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>
没有其他用户的迹象:(我想知道我是否应该做这些手动之后!