Graylog 容器无法连接到 MongoDB 个容器

Graylog container cannot connect to MongoDB container

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

同时尝试 rootgraylog 用户(在 graylogadmin db 中)给出相同的结果。

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

相同

我是 MongoDB 的新手,不知道身份验证的工作原理。但据我所知,为根帐户(https://github.com/docker-library/mongo/pull/145)提供user/pw时,身份验证(类似于--auth参数)被激活。

Graylog 是否可能使用与 MongoDB 预期不同的身份验证机制?请参阅 pasted log

中的第 158 行

root 用户的错误消息

mongodb_1        | 2017-04-16T13:27:52.486+0000 I NETWORK  [thread1] connection accepted from 172.18.0.4:46566 #12 (1 connection now open)
mongodb_1        | 2017-04-16T13:27:52.495+0000 I NETWORK  [conn12] received client metadata from 172.18.0.4:46566 conn12: { driver: { name: "mongo-java-driver", version: "unknown" }, os: { type: "Linux", name: "Linux", architecture: "amd64", version: "4.4.0-72-generic" }, platform: "Java/Oracle Corporation/1.8.0_72-internal-b15" }
mongodb_1        | 2017-04-16T13:27:52.525+0000 I ACCESS   [conn12] SCRAM-SHA-1 authentication failed for root on graylog from client 172.18.0.4:46566 ; UserNotFound: Could not find user root@graylog
mongodb_1        | 2017-04-16T13:27:52.543+0000 I -        [conn12] end connection 172.18.0.4:46566 (1 connection now open)

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

mongodb_1        | 2017-04-16T15:47:48.404+0000 I NETWORK  [thread1] connection accepted from 172.18.0.4:41602 #7 (1 connection now open)
mongodb_1        | 2017-04-16T15:47:48.410+0000 I NETWORK  [conn7] received client metadata from 172.18.0.4:41602 conn7: { driver: { name: "mongo-java-driver", version: "unknown" }, os: { type: "Linux", name: "Linux", architecture: "amd64", version: "4.4.0-72-generic" }, platform: "Java/Oracle Corporation/1.8.0_72-internal-b15" }
mongodb_1        | 2017-04-16T15:47:48.418+0000 I ACCESS   [conn7] SCRAM-SHA-1 authentication failed for graylog on graylog from client 172.18.0.4:41602 ; UserNotFound: Could not find user graylog@graylog
mongodb_1        | 2017-04-16T15:47:48.423+0000 I -        [conn7] end connection 172.18.0.4:41602 (1 connection now open)

这是我的./docker-composer.yml


    version: '2'
    services:
      mongodb:
        build: ./mongodb
        volumes:
          - /docker/mongodb/data:/data/db
      elasticsearch:
        image: "elasticsearch:2"
        command: "elasticsearch -Des.cluster.name='graylog'"
        volumes:
          - /docker/elasticsearch/data:/usr/share/elasticsearch/data
      graylog:
        image: graylog2/server
        volumes:
          - /docker/graylog/journal:/usr/share/graylog/data/journal
          - /docker/graylog/config:/usr/share/graylog/data/config
        environment:
          #GRAYLOG_MONGODB_URI: mongodb://root:drUqGGCMh@mongodb:27017/graylog
          GRAYLOG_MONGODB_URI: mongodb://graylog:vWGzncmBe9@mongodb:27017/graylog
        depends_on:
          - mongodb
          - elasticsearch
        ports:
          - "9000:9000"

./mongodb/Dockerfile


    FROM mongo:3
    ENV MONGO_INITDB_ROOT_USERNAME: root
    ENV MONGO_INITDB_ROOT_PASSWORD: drUqGGCMh
    ADD grayloguser.js /docker-entrypoint-initdb.d/grayloguser.js

./mogodb/grayloguser.js


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

您的 MongoDB 脚本不正确。

要么将 db.getSiblingDB('graylog') 的 return 值分配给变量并将其用于 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