Krz*_*ski 6 mongodb docker spring-boot docker-compose
这是我的 docker-compose.yaml:
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
Run Code Online (Sandbox Code Playgroud)
这在我的弹簧配置中:
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
Run Code Online (Sandbox Code Playgroud)
但是每次当我尝试将我的应用程序连接到 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"
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?我尝试删除所有容器并docker system prune
再次运行它,但它仍然给出相同的错误。
您需要在 application.properties 中添加以下行:
spring.data.mongodb.authentication-database=admin
Run Code Online (Sandbox Code Playgroud)
MONGO_INITDB_ROOT_USERNAME、MONGO_INITDB_ROOT_PASSWORD
这些变量结合使用可创建新用户并设置该用户的密码。该用户是在管理员身份验证数据库中创建的,并被赋予 root 角色,即“超级用户”角色。
对于数据库:
MONGO_INITDB_DATABASE 此变量允许您指定用于在 /docker-entrypoint-initdb.d/*.js 中创建脚本的数据库名称... MongoDB 基本上是为“首次使用时创建”而设计的,所以如果您这样做不使用 JavaScript 文件插入数据,则不会创建数据库。
在 MongoDB 中,启用身份验证后,您总是针对特定数据库(默认为 admin)进行身份验证,然后连接并使用另一个数据库。这就是为什么有两种不同的属性:身份验证数据库(用于身份验证)和数据库(要使用的属性)