【问题标题】:Graylog container cannot connect to MongoDB containerGraylog 容器无法连接到 MongoDB 容器
【发布时间】:2017-09-13 10:23:39
【问题描述】:

我在 docker 下设置 Graylog2 时遇到了一些麻烦。一切正常,直到我尝试使用身份验证。我得到的只是永远重复的以下错误。

尝试rootgraylog 用户(在graylogadmin db 中)得到相同的结果。

来自 mongodb 的日志显示两个用户都是在安装过程中创建的。但是 graylog 说它在数据库 graylog 中找不到任何 graylog 用户。与用户 root 相同。

我是 MongoDB 新手,不知道身份验证是如何工作的。但据我了解,在为 root 帐户(https://github.com/docker-library/mongo/pull/145)提供用户/密码时激活身份验证(类似于--auth 参数)。

Graylog 的身份验证机制是否可能与 MongoDB 所期望的不同?请参阅pasted log 中的第 158 行

root 用户的错误信息

mongodb_1 | 2017-04-16T13:27:52.486+0000 I NETWORK [thread1] 连接从 172.18.0.4:46566 #12 接受(现在打开 1 个连接) mongodb_1 | 2017-04-16T13:27:52.495+0000 I NETWORK [conn12] 从 172.18.0.4:46566 conn12 收到客户端元数据:{驱动程序:{名称:“mongo-java-driver”,版本:“未知”},操作系统: {类型:“Linux”,名称:“Linux”,架构:“amd64”,版本:“4.4.0-72-generic”},平台:“Java/Oracle Corporation/1.8.0_72-internal-b15”} mongodb_1 | 2017-04-16T13:27:52.525+0000 I ACCESS [conn12] SCRAM-SHA-1 身份验证在来自客户端 172.18.0.4:46566 的灰色日志上的 root 失败; UserNotFound: 找不到用户 root@graylog mongodb_1 | 2017-04-16T13:27:52.543+0000 I - [conn12] 结束连接 172.18.0.4:46566(现在打开 1 个连接)

作为 graylog 用户的错误消息 (Full log on pastebin)

mongodb_1 | 2017-04-16T15:47:48.404+0000 I NETWORK [thread1] 接受来自 172.18.0.4:41602 #7 的连接(现在打开 1 个连接) mongodb_1 | 2017-04-16T15:47:48.410+0000 I NETWORK [conn7] 从 172.18.0.4:41602 conn7 收到客户端元数据:{驱动程序:{名称:“mongo-java-driver”,版本:“未知”},操作系统: {类型:“Linux”,名称:“Linux”,架构:“amd64”,版本:“4.4.0-72-generic”},平台:“Java/Oracle Corporation/1.8.0_72-internal-b15”} mongodb_1 | 2017-04-16T15:47:48.418+0000 I ACCESS [conn7] SCRAM-SHA-1 身份验证在来自客户端 172.18.0.4:41602 的 graylog 上的 graylog 失败; UserNotFound: 找不到用户 graylog@graylog mongodb_1 | 2017-04-16T15:47:48.423+0000 I - [conn7] 结束连接 172.18.0.4:41602(现在打开 1 个连接)

这是我的 ./docker-composer.yml

版本:'2' 服务: 蒙哥达: 构建:./mongodb 卷: - /docker/mongodb/data:/data/db 弹性搜索: 图片:“弹性搜索:2” 命令:“elasticsearch -Des.cluster.name='graylog'” 卷: - /docker/elasticsearch/data:/usr/share/elasticsearch/data 灰色日志: 图片:graylog2/服务器 卷: - /docker/graylog/journal:/usr/share/graylog/data/journal - /docker/graylog/config:/usr/share/graylog/data/config 环境: #GRAYLOG_MONGODB_URI: mongodb://root:drUqGGCMh@mongodb:27017/graylog GRAYLOG_MONGODB_URI: mongodb://graylog:vWGzncmBe9@mongodb:27017/graylog 取决于: - MongoDB - 弹性搜索 端口: - “9000:9000”

./mongodb/Dockerfile

从蒙戈:3 ENV MONGO_INITDB_ROOT_USERNAME:根 ENV MONGO_INITDB_ROOT_PASSWORD:drUqGGCMh 添加 grayloguser.js /docker-entrypoint-initdb.d/grayloguser.js

./mogodb/grayloguser.js

db.getSiblingDB('graylog'); db.createUser( { 用户:“灰色日志”, 密码:“vWGzncmBe9”, 角色:[ {角色:“dbOwner”,db:“graylog”} ] } );

【问题讨论】:

  • 看起来像UserNotFound: Could not find user root@grayloggraylog db 中有 root 用户吗?当您尝试与graylog 用户连接时,您是否看到相同的错误?
  • 我得到了使用 JS 脚本创建的 graylog 用户的确切错误。我认为 dbOwner 应该足够了吗?我也在想根据初始化脚本具有root角色的root用户应该能够做任何事情?
  • 我认为角色现在不是问题。看起来如果创建的用户没有被看到。您是如何启用授权的?你想做什么操作?
  • 用户已创建,我可以看到在初始 docker-compose 和构建过程中,graylog 用户和 root 都是如此。但是,当一切就绪并且 graylog 开始尝试连接并填充数据库时,它会显示上述错误。我制作了一个包含所有输出的 pastebin。 pastebin.com/ppyaWYzv
  • 据我了解,当将用户和密码的环境变量提供给 docker 映像和初始化进程时,授权类似于 --auth 参数启用。 github.com/docker-library/mongo/pull/145

标签: mongodb security docker graylog


【解决方案1】:

您的 MongoDB 脚本不正确。

要么将db.getSiblingDB('graylog') 的返回值分配给一个变量并将其用于createUser(),要么继续使用use graylog

graylog = db.getSiblingDB('graylog');
graylog.createUser(
  {
    user: "graylog",
    pwd: "vWGzncmBe9",
    roles: [
       { role: "dbOwner", db: "graylog" }
    ]
  }
);

换句话说,只要坚持 MongoDB 文档:https://docs.mongodb.com/manual/tutorial/create-users/#username-password-authentication

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-26
    • 2016-01-29
    • 1970-01-01
    • 2016-03-02
    • 2019-10-17
    • 2022-01-11
    • 1970-01-01
    相关资源
    最近更新 更多