mongodb - 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
到目前为止没有任何效果
解决方案
当您在 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 选项开头......但这种行为对我不起作用。
推荐阅读
- rust - 从对特征关联类型的引用中读取值时,如何解决“借用内容”错误?
- c# - 在不继承单一行为的情况下实例化预制件
- apache - 这个 Apache 环境变量语法是如何工作的?
- visual-studio - 无法使用 Visual Studion 2015 在 utasker 上运行 STM32Fxx 板
- javascript - 用时刻 JS 格式化日期以匹配
- python - Python - 将 for 循环中的所有内容打包成一个函数是个好主意吗?
- python - django:为模型创建子模型
- tfs - 安装 TFS 2018 插件
- git - 如何将文件从 master 下载到分支
- javascript - CK 编辑器在回发时更改内容 (4.10.1)