0

我创建了一个带有附加 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>

没有其他用户的迹象:(我想知道我以后是否应该手动执行这些操作!

4

0 回答 0