han*_*ris 0 mongodb docker docker-compose
我正在尝试使用身份验证运行mongo docker映像。遵循文档中最简单的示例,我通过docker-compose up命令运行了mongo和mongo-express图像。我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
Run Code Online (Sandbox Code Playgroud)
这样运行,两个容器都可以正常运行,我可以从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
Run Code Online (Sandbox Code Playgroud)
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' }
Run Code Online (Sandbox Code Playgroud)
无论什么用户名或密码我进入docker-compose.yml,我不能让蒙戈-EXPRESS连接到蒙戈,只有当我使用原始root和example对。
请注意,我没有将用户名和密码用作环境变量,但是可以将它们直接键入docker-compose.yml文件中,如您在此处看到的那样。
还要注意,当我将MONGO_INITDB_ROOT_USERNAMEand MONGO_INITDB_ROOT_PASSWORD(mongo's)变量更改为任何值时,它们似乎都没有作用,我仍然可以使用原始根目录和示例凭据与mongo-express连接。
是什么导致这种行为?我该如何进行这项工作?
Amr*_*bhu 16
对我有用的只是为 mongodb 服务器添加环境变量。
ME_CONFIG_MONGODB_SERVER: mongo
Run Code Online (Sandbox Code Playgroud)
像这样:
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
ME_CONFIG_MONGODB_SERVER: mongo
Run Code Online (Sandbox Code Playgroud)
您docker-compose命令:
docker-compose up --build --force-recreate
Run Code Online (Sandbox Code Playgroud)
Mongo映像使用匿名卷,因此您还需要--renew-anon-volumes(doc):
docker-compose up --build --force-recreate --renew-anon-volumes
Run Code Online (Sandbox Code Playgroud)
否则,将使用具有已初始化DB的先前卷=> INITDB env变量将不被使用。
| 归档时间: |
|
| 查看次数: |
1676 次 |
| 最近记录: |