首页 > 解决方案 > Docker MongoDB 无法以 root 身份登录

问题描述

我正在尝试使用 docker 设置 mongo,但我不知道登录 mongo 的正确方法。它似乎没有像我指定的那样创建默认的 root 用户:

version: '3'
services:
  location-mongo-db:
    container_name: location-mongo-db
    image: mongo
    ports:
      - "27017:27017"
    restart: always
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: example
networks:
  default:
    external:
      name: environment_location-mongo

我跑

docker-compose -f docker-compose/db.yml -p location-mongo-db up -d --build 

然后我做

docker exec -it location-mongo-db sh 

进入外壳并# mongo从容器内部运行。我得到以下信息:

# mongo
MongoDB shell version v4.0.0
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 4.0.0
> show dbs
2018-06-28T15:45:36.337+0000 E QUERY    [js] Error: listDatabases failed:{
 "ok" : 0,
 "errmsg" : "command listDatabases requires authentication",
 "code" : 13,
 "codeName" : "Unauthorized"
} :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
Mongo.prototype.getDBs@src/mongo/shell/mongo.js:65:1
shellHelper.show@src/mongo/shell/utils.js:865:19
shellHelper@src/mongo/shell/utils.js:755:15
@(shellhelp2):1:1

我不知道问题是什么。这是我检查用户列表的输出:

> db.runCommand({connectionStatus : 1})
{
 "authInfo" : {
 "authenticatedUsers" : [ ],
 "authenticatedUserRoles" : [ ]
 },
 "ok" : 1
}

什么不见​​了?我尝试过使用等几种不同的方式登录,-u root-p到目前为止没有任何效果

标签: mongodbdocker

解决方案


当您在 mongo 命令上没有参数的情况下启动 mongo 客户端时,您将自己连接为未经身份验证的用户,具有非常有限的权限。从您的 docker tty(以及从您的主机终端,因为您公开 mongodb 端口)与您的 root 用户凭据连接的正确命令是:

mongo -u root -p example --authenticationDatabase admin

要完全禁用没有身份验证的连接,您需要使用 --auth 选项启动 mongod 进程。

编辑:根据文档,似乎设置了两个环境变量 MONGO_INITDB_ROOT_USERNAME 和 MONGO_INITDB_ROOT_PASSWORD ,docker容器中的 mongod 必须自动以 --auth 选项开头......但这种行为对我不起作用。


推荐阅读