我通过docker compose up
运行MongoDB/MongoExpress堆栈,如here所示:
# Use root/example as user/password credentials
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_URL: mongodb://root:example@mongo:27017/
字符串
一切正常,但从MongoExpress的输出中,我可以看到
mongotest-mongo-express-1 | Mongo Express server listening at http://0.0.0.0:8081
mongotest-mongo-express-1 | Server is open to allow connections from anyone (0.0.0.0)
mongotest-mongo-express-1 | basicAuth credentials are "admin:pass", it is recommended you change this in your config.js!
型
实际上,通过连接到localhost:8081
,我必须提供admin
和pass
作为访问凭据。
我想通过设置默认用户名和密码直接从Dockerfile更改此行为
根据this文档,我对mongo-express
环境进行了如下修改:
environment:
ME_CONFIG_MONGODB_ENABLE_ADMIN: false
ME_CONFIG_MONGODB_AUTH_DATABASE: custom_db_name
ME_CONFIG_MONGODB_AUTH_USERNAME: custom_username
ME_CONFIG_MONGODB_AUTH_PASSWORD: custom_password
ME_CONFIG_MONGODB_ADMINUSERNAME: root
ME_CONFIG_MONGODB_ADMINPASSWORD: example
ME_CONFIG_MONGODB_URL: mongodb://root:example@mongo:27017/
型
但是除了Mongo之外,什么都没有改变,它已经从三个数据库(admin
,config
和local
)变成了只有一个(test
)。
谢谢你能给我的任何帮助给予。
1条答案
按热度按时间pkwftd7m1#
我对Docker一无所知,但让我试着解释一下MongoDB中的用户管理。
一个用户的作用域是一个数据库,也就是说,你可以定义创建用户的数据库,例如:
字符串
或者你也可以写
型
然而,通常用户是在
admin
数据库中创建的,老实说,我不知道为什么要在其他地方创建用户。admin
数据库是内置的数据库,除了用户认证和授权数据外,还包括管理整个系统的角色,而不仅仅是单个数据库。这些角色主要与副本集和分片集群管理功能有关。在
admin
以外的other数据库中创建的角色只能包含应用于其数据库的权限,并且只能从其数据库中的其他角色继承。在
admin
数据库中创建的角色可以包括应用于任何数据库或群集资源的权限,并且可以从其他数据库以及admin
数据库中的角色继承。试试
db.getUsers()
看看用户是在哪里创建的,你被授予了哪些角色。