mongodb - Docker 内部的 Mongo 身份验证
问题描述
我正在尝试使用身份验证运行 mongo docker 映像。按照文档中最简单的示例,我通过命令运行了 mongo 和 mongo-express 图像docker-compose up
。我docker-compose.yml
在这个阶段:
version: '3.1'
services:
mongo:
image: mongo
restart: always
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: example
mongo-express:
image: mongo-express
restart: always
ports:
- 8081:8081
environment:
ME_CONFIG_MONGODB_ADMINUSERNAME: root
ME_CONFIG_MONGODB_ADMINPASSWORD: example
这样运行,两个容器都可以正常启动,我可以从 mongo-express 网站浏览 mongo 的内容。但是,每当我更改docker-compose.yml
文件中的用户名或密码时,例如:
version: '3.1'
services:
mongo:
image: mongo
restart: always
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: example123
mongo-express:
image: mongo-express
restart: always
ports:
- 8081:8081
environment:
ME_CONFIG_MONGODB_ADMINUSERNAME: root
ME_CONFIG_MONGODB_ADMINPASSWORD: example123
mongo-express 抛出未经授权的错误消息:
mongo-express_1 | Admin Database connected
mongo-express_1 | { MongoError: Authentication failed.
mongo-express_1 | at Function.MongoError.create (/node_modules/mongodb-core/lib/error.js:31:11)
mongo-express_1 | at /node_modules/mongodb-core/lib/connection/pool.js:483:72
mongo-express_1 | at authenticateStragglers (/node_modules/mongodb-core/lib/connection/pool.js:429:16)
mongo-express_1 | at Connection.messageHandler (/node_modules/mongodb-core/lib/connection/pool.js:463:5)
mongo-express_1 | at Socket.<anonymous> (/node_modules/mongodb-core/lib/connection/connection.js:319:22)
mongo-express_1 | at emitOne (events.js:116:13)
mongo-express_1 | at Socket.emit (events.js:211:7)
mongo-express_1 | at addChunk (_stream_readable.js:263:12)
mongo-express_1 | at readableAddChunk (_stream_readable.js:250:11)
mongo-express_1 | at Socket.Readable.push (_stream_readable.js:208:10)
mongo-express_1 | name: 'MongoError',
mongo-express_1 | message: 'Authentication failed.',
mongo-express_1 | ok: 0,
mongo-express_1 | errmsg: 'Authentication failed.',
mongo-express_1 | code: 18,
mongo-express_1 | codeName: 'AuthenticationFailed' }
mongo-express_1 | unable to list databases
mongo-express_1 | { MongoError: command listDatabases requires authentication
mongo-express_1 | at Function.MongoError.create (/node_modules/mongodb-core/lib/error.js:31:11)
mongo-express_1 | at /node_modules/mongodb-core/lib/connection/pool.js:483:72
mongo-express_1 | at authenticateStragglers (/node_modules/mongodb-core/lib/connection/pool.js:429:16)
mongo-express_1 | at Connection.messageHandler (/node_modules/mongodb-core/lib/connection/pool.js:463:5)
mongo-express_1 | at Socket.<anonymous> (/node_modules/mongodb-core/lib/connection/connection.js:319:22)
mongo-express_1 | at emitOne (events.js:116:13)
mongo-express_1 | at Socket.emit (events.js:211:7)
mongo-express_1 | at addChunk (_stream_readable.js:263:12)
mongo-express_1 | at readableAddChunk (_stream_readable.js:250:11)
mongo-express_1 | at Socket.Readable.push (_stream_readable.js:208:10)
mongo-express_1 | name: 'MongoError',
mongo-express_1 | message: 'command listDatabases requires authentication',
mongo-express_1 | ok: 0,
mongo-express_1 | errmsg: 'command listDatabases requires authentication',
mongo-express_1 | code: 13,
mongo-express_1 | codeName: 'Unauthorized' }
无论我输入什么用户名或密码docker-compose.yml
,我都无法让 mongo-express 连接到 mongo,除非我使用原始root
和example
配对。
请注意,我没有将用户名和密码作为环境变量获取,而是直接输入到docker-compose.yml
文件中,如您在此处看到的那样。
另请注意,当我将MONGO_INITDB_ROOT_USERNAME
and MONGO_INITDB_ROOT_PASSWORD
(mongo's) 变量更改为任何内容时,它们似乎没有效果,我仍然可以使用原始根和示例凭据与 mongo-express 连接。
是什么导致了这种行为?我怎样才能使这项工作?
解决方案
推荐阅读
- ios - 我们的 iOS 应用程序被删除后我能做什么?
- pdf - JsReport Chrome-pdf 配方横向选项
- sql - 在oracle中将父子行转换为JSON
- php - 在 HEADER 中使用用户令牌验证 API
- python - csv.DictReader 分隔符在带有多个引号的 csv 字段中
- python-3.x - 将数据从数据框的顶部移动到底部(df 的列具有不同的长度索引)
- java - 为什么节点被添加到错误的链表中?
- cassandra - 第三个 Cassandra 节点有不同的负载
- haskell - 这种处理哈希冲突的方法是新的/独特的吗?
- android - 我如何为 Nexus 5x 构建 android 4.4.4_r1