Mongodb 无法验证使用docker env变量创建的mongo用户
我在用docker compose的官方软件。 但是我无法使用环境变量Mongodb 无法验证使用docker env变量创建的mongo用户,mongodb,docker,Mongodb,Docker,我在用docker compose的官方软件。 但是我无法使用环境变量MONGO\u INITDB\u ROOT\u USERNAME,MONGO\u INITDB\u ROOT\u PASSWORD进行身份验证。 在docker-compose.yaml中: mongo: image: mongo:4.4 container_name: mongo restart: unless-stopped tty: true environment:
MONGO\u INITDB\u ROOT\u USERNAME
,MONGO\u INITDB\u ROOT\u PASSWORD
进行身份验证。
在docker-compose.yaml中:
mongo:
image: mongo:4.4
container_name: mongo
restart: unless-stopped
tty: true
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: somepass
MONGO_INITDB_DATABASE: somedb
SERVICE_TAGS: dev
SERVICE_NAME: mongo
ports:
- "27017:27017"
volumes:
- mongodbdata:/data/db
networks:
- backend-network
运行容器后,我无法验证:
$ docker exec -it mongo mongo -u root -p somepass --authenticationDatabase somedb
MongoDB shell version v4.4.1
connecting to: mongodb://127.0.0.1:27017/?authSource=somedb&compressors=disabled&gssapiServiceName=mongodb
Error: Authentication failed. :
connect@src/mongo/shell/mongo.js:374:17
@(connect):2:6
exception: connect failed
exiting with code 1
我不知道我做错了什么。
看起来这个用户还没有创建:
{"t":{"$date":"2020-10-10T11:23:05.772+00:00"},"s":"I", "c":"ACCESS", "id":20249, "ctx":"conn1","msg":"Authentication failed","attr":{"mechanism":"SCRAM-SHA-1","principalName":"root","authenticationDatabase":"somedb","client":"127.0.0.1:50990","result":"UserNotFound: Could not find user \"root\" for db \"somedb\""}}
我还试图:
- 删除env变量
,并根据“admin”db进行身份验证MONGO_INITDB_数据库
- 在我放入
容器中的js文件中创建了另一个具有/docker entrypoint initdb.d
的用户,然后尝试对此用户进行身份验证db.createUser()
当我没有将挂载绑定到
/data/db
时,它会工作您应该使用authenticationDatabase admin
进行身份验证
从:
MONGO_INITDB_ROOT_用户名,MONGO_INITDB_ROOT_密码
变量,结合使用,创建一个新用户并设置该用户的
密码。此用户是在管理员身份验证数据库中创建的
并指定root角色,这是一个“超级用户”角色
docker exec-it mongo mongo-u root-p somepass--authenticationDatabase admin
应该有用
起作用的顺序:
- 创建了以下
:docker compose.yaml
mongo: image: mongo:4.4 container_name: mongo restart: unless-stopped tty: true environment: MONGO_INITDB_ROOT_USERNAME: root MONGO_INITDB_ROOT_PASSWORD: somepass MONGO_INITDB_DATABASE: somedb SERVICE_TAGS: dev SERVICE_NAME: mongo ports: - "27017:27017"
- 在
所在的文件夹中运行docker compose.yaml
docker compose up-d
- 登录到mongo shell:
docker exec-it mongo mongo-u root-p somepass--authenticationDatabase admin
volumes
部分时,它才起作用。一旦删除network
部分,我就不知道为什么它对我有效,因为我没有这样的网络mongodata
被命名为卷,它可能已经包含数据,docker compose up
在运行它时可能会失败。我已经用一系列命令更新了我的答案,这些命令应该会起作用,我建议在成功后克服身份验证问题docker compose up
,然后添加网络和卷。当您删除volumes
部分时,mongodb
将数据存储在容器中,它从空数据开始,所以它可以解释你为什么成功。当您使用命名卷mongodbdata
时,它可能已经包含数据(包括管理员数据库的用户名和密码)。您还应该删除MONGO\u INITDB\u数据库
env.variable,除非您使用它。