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

在使用Docker compose创建的Mongodb容器上使用根凭据登录,mongodb,docker,docker-compose,Mongodb,Docker,Docker Compose,我正在按照建议为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

我正在按照建议为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    | }
当我尝试使用该用户的身份验证启动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的正确命令是什么?

在mongo上配置身份验证有一些先决条件:

  • 将该行放在mongod.conf中

    安全:

    授权:已启用

在此之后,重新启动docker并按照以下步骤操作:

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

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

  • 出口Mongo外壳

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

mongo admin-u root-proot

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

mongo -u "admin" -p "admin" --authenticationDatabase 'admin'
您可以参考本文了解mongo身份验证