Назад | Перейти на главную страницу

Клиент Mongo подключается с параметрами командной строки, но не работает с эквивалентным URI

Когда я создаю базу данных MongoDB с помощью этого скрипта:

#!/bin/bash

javascript='
db.dropUser("admin");
db.createUser({
    user: "admin",
    pwd: "password",
    roles: [
        {role: "userAdminAnyDatabase", db: "admin"}
    ]
});
db.getSiblingDB("example").empty.save({"empty": 0});
'

docker-compose exec mongodb mongo --eval "${javascript}"

Я могу успешно войти с помощью mongo параметры оболочки и командной строки:

$ mongo --host docker-machine -u admin -p password
MongoDB shell version v3.4.10
connecting to: mongodb://docker-machine:27017/
MongoDB server version: 3.4.10

Но с тем, что кажется эквивалентным URI соединения, соединение не работает:

$ mongo 'mongodb://admin:password@docker-machine/'
MongoDB shell version v3.4.10
connecting to: mongodb://admin:password@docker-machine/
2017-12-06T21:17:47.297-0700 E QUERY    [thread1] Error: Authentication failed. :
connect@src/mongo/shell/mongo.js:237:13
@(connect):1:6
exception: connect failed

И журнал MongoDB показывает:

2017-12-07T04:16:27.703+0000 I ACCESS   [conn100]
    SCRAM-SHA-1 authentication failed for admin on admin from client
    10.211.55.2:52496 ; AuthenticationFailed: SCRAM-SHA-1 authentication
    failed, storedKey mismatch

В чем дело?

Вам необходимо подключиться к MongoDB admin база данных:

docker-compose exec mongodb mongo admin --eval "${javascript}"
#                                 ^^^^^ add this