Что может привести к тому, что mongodb, запущенный в Docker, не сможет успешно пройти аутентификацию? - PullRequest
0 голосов
/ 04 октября 2018

Я запускаю на своей машине докер-контейнер mongodb 1002 *, и я хочу, чтобы он запускался при запуске компьютера.Тем не менее, каждый раз, когда я загружаю свой компьютер, мне приходится делать docker restart контейнера, потому что «автоматически запускаемый» контейнер дает мне Authentication failed, когда я даю ему действительные учетные данные.Ручной перезапуск контейнера-нарушителя немедленно решает проблему.

Я использую систему Ubuntu 18.04 , на зашифрованном разделе , с последним докером и MongoDB 4.0.2 (хотя у меня была эта проблема с каждой версией, которую я пробовал).Как ни странно, эта проблема не возникает в незашифрованном разделе.

Я хотел бы знать, может ли это быть possibly вызвано шифрованием раздела (Во время установки Ubuntu у вас есть выбор шифрования).Кроме того, я глубоко заинтригован этой проблемой, и любой выстрел в нее очень ценится.Наконец, я не уверен, где открыть отчет об ошибке, является ли это проблемой с mongo, docker, Ubuntu или шифрованием, которое использует Ubuntu.

Если кому-то нравится копировать проблему:

Запустите незащищенный контейнер монго.

docker run --volume ~/test-data:/data/db --publish --name mongo-unauthenticated 27017:27017 mongo:4.0.2

Подключитесь к нему и создайте несколько пользователей:

mongo
use admin
db.createUser(
  {
    user: "admin",
    pwd: "password",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
  }
)

use test
db.createUser(
  {
    user: "tester",
    pwd: "password",
    roles: [ { role: "readWrite", db: "test" } ]
  }
)

exit

Теперь переведите незащищенный монго в автономный режим:

docker stop mongo-unauthenticated

И поставить защищенную версию на место.Обратите внимание на флаг --restart always, который приводит к автоматическому запуску контейнера.

docker run --restart always  --publish 27017:27017 --name test-mongo -v ~/test-data:/data/db mongo:4.0.2 --auth

Убедитесь, что вы можете подключиться с действительными учетными данными:

mongo --port 27017 -u "tester" -p "password" --authenticationDatabase "test"

Произведите чистое завершение работы:

docker stop mongo-unauthenticated

Перезагрузите компьютер.

reboot

Убедитесь, что --restart always работает.

docker ps

И получите ошибку аутентификации с нетронутыми учетными данными.

mongo --port 27017 -u "tester" -p "password" --authenticationDatabase "test"
...