Контейнер Graylog не может подключиться к контейнеру MongoDB

У меня проблемы с настройкой Graylog2 под докером. Все работает, пока я не попробую использовать аутентификацию. Все, что я получаю, - это повторяющаяся вечно следующая ошибка.

Попытка использовать как root, так и graylog user (как в graylog, так и в admin db) дает одинаковый результат.

В журнале mongodb говорится, что оба пользователя созданы во время установки. Но graylog сообщает, что не находит graylog пользователей в базе данных graylog. То же самое с пользователем root.

Я новичок в MongoDB и понятия не имею, как работает аутентификация. Но насколько я понимаю, аутентификация (аналогичная параметру --auth) активируется при предоставлении user / pw для учетной записи root (https://github.com/docker-library/mongo/pull/145).

Возможно ли, что Graylog использует другой механизм аутентификации, чем ожидает MongoDB? См. Строку 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 (Полный вход в 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" }
        ]
      }
    );


person Mr. H    schedule 17.04.2017    source источник
comment
Похоже на UserNotFound: Could not find user root@graylog. У нас есть root пользователь в graylog db? Вы видите ту же ошибку, когда пытаетесь подключиться к graylog пользователю?   -  person s7vr    schedule 18.04.2017
comment
Я получаю точную ошибку с пользователем graylog, созданным с помощью сценария JS. Я ошибаюсь, думая, что dbOwner должно быть достаточно? Я также думаю, что пользователь root с ролью root согласно сценарию инициализации должен уметь все?   -  person Mr. H    schedule 18.04.2017
comment
Я не думаю, что роль здесь сейчас проблема. Похоже, что созданных пользователей не видно. Как вы включили авторизацию? Какую операцию вы пытаетесь сделать?   -  person s7vr    schedule 18.04.2017
comment
Пользователь создан, я вижу, что во время первоначальной компоновки и сборки docker, как пользователь graylog, так и root. Однако, когда все в порядке и graylog начинает попытки подключиться и заполнить БД, он показывает ошибки, указанные выше. Я сделал pastebin со всем выводом. pastebin.com/ppyaWYzv   -  person Mr. H    schedule 18.04.2017
comment
Насколько я понимаю, авторизация включена аналогично параметру --auth, когда переменные среды для пользователя и пароля передаются образу докера и процессу инициализации. github.com/docker-library/mongo/pull/145   -  person Mr. H    schedule 18.04.2017
comment
Спасибо за всю информацию. Журналы выглядят хорошо, и похоже, что root пользователь создан в admin db, а приложение ищет в graylog db. Как настраивается uri подключения приложения (java-драйвера mongo)? Установлен ли он для просмотра базы данных администратора для пользователя root?   -  person s7vr    schedule 18.04.2017


Ответы (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

person joschi    schedule 18.04.2017