在使用Docker compose创建的Mongodb容器上使用根凭据登录

时间:2018-12-03 04:51:51

标签: mongodb docker docker-compose

我正在按照here的建议为mongod服务器创建一个docker容器。我的docker compose文件如下所示:

version: '3.2'

services:
  mongo:
    container_name: mongo
    image: mongo
    restart: always
    environment:
      MONGO_INITDB_ROOT_USERNAME: admin
      MONGO_INITDB_ROOT_PASSWORD: admin
    volumes:
      - ./data:/data/db
    ports:
      - "27017:27017"

然后我使用docker compose命令构建并运行容器:

docker-compose up --build

在启动日志中,我可以看到正在创建的用户:

mongo    | 2018-12-03T04:40:00.562+0000 I STORAGE  [conn2] createCollection: 
admin.system.users with generated UUID: ...
mongo    | Successfully added user: {
mongo    |      "user" : "admin",
mongo    |      "roles" : [
mongo    |              {
mongo    |                      "role" : "root",
mongo    |                      "db" : "admin"
mongo    |              }
mongo    |      ]
mongo    | }

当我尝试使用该用户的auth启动mongo时,我收到授权错误:

mongo -u "admin" -p "admin"

2018-12-03T04:47:34.752+0000 E QUERY    [thread1] Error: Authentication failed. :
DB.prototype._authOrThrow@src/mongo/shell/db.js:1608:20
@(auth):6:1
@(auth):1:2
exception: login failed

使用上述凭据连接到mongo的正确命令是什么?

2 个答案:

答案 0 :(得分:0)

在mongo上配置身份验证需要满足一些先决条件:

  • 将此行放入mongod.conf

    安全性:

    授权:已启用

此后,重新启动docker并执行以下步骤:

  • 通过mongo连接到mongo
  • 使用管理员
  • 创建用户

    {
        user: "root",
        pwd: "root",
        roles: [ { role: "userAdminAnyDatabase,readWriteAnyDatabase", db: "admin" } ]
    

    }     )

  • 退出Mongo shell

    • 提供身份验证数据库以连接到mongo:

mongo admin -u root -proot

答案 1 :(得分:0)

最后,我只缺少authdb标志,因此以下mongo命令解决了我的问题:

mongo -u "admin" -p "admin" --authenticationDatabase 'admin'