这是我的船坞-合成人。
version: "2.0"
services:
mongo_container:
image: mongo:latest
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: example
MONGO_INITDB_DATABASE: testdb
ports:
- "27017:27017"
volumes:
- ./mongodata:/data/db
在我的弹簧配置中:
spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
spring.data.mongodb.username=root
spring.data.mongodb.password=example
spring.data.mongodb.database=testdb
但是,每次我尝试将我的应用程序连接到Mongo时,我都会在Docker控制台中看到以下错误:
mongo_container_1 | 2020-03-31T07:37:24.803+0000 I ACCESS [conn2] SASL SCRAM-SHA-1 authentication failed for root on testdb from client 172.29.0.1:36628 ; UserNotFound: Could not find user "root" for db "testdb"
我做错了什么?我尝试用docker system prune
删除所有容器,然后再次运行它,但是仍然会出现相同的错误。
发布于 2020-03-31 14:49:43
您需要在application.properties中添加以下行:
spring.data.mongodb.authentication-database=admin
MONGO_INITDB_ROOT_USERNAME,MONGO_INITDB_ROOT_PASSWORD 这些变量用于连接,创建一个新用户并设置该用户的密码。这个用户是在管理身份验证数据库中创建的,并给出了根的角色,它是一个“超级用户”角色。
至于数据库:
这个变量允许您指定一个数据库的名称,以便在/ MONGO_INITDB_DATABASE -entrypoint-initdb.d/*..js中创建脚本.MongoDB从根本上说是为“先创建”而设计的,因此如果您不使用JavaScript文件插入数据,则不会创建数据库。
在MongoDB中,当身份验证启用时,您可以对特定的数据库进行身份验证(默认情况下是管理),然后连接并使用另一个数据库。这就是为什么有两个不同的属性:身份验证-数据库(用于身份验证)和数据库(要使用的属性)。
https://stackoverflow.com/questions/60945565
复制