You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot连接Docker部署的MongoDB认证失败求助

问题分析与解决方案

核心问题定位

从错误日志MongoCredential{mechanism=SCRAM-SHA-1, userName='adrian', source='documents'}可明确:认证时使用的源数据库是documents,但你通过MONGO_INITDB_ROOT_USERNAME创建的adrian是root用户,其认证数据库应为admin——这是导致认证失败的核心矛盾。

解决方案步骤

1. 强制指定认证数据库与机制

最新版MongoDB默认采用SCRAM-SHA-256作为认证机制,而Spring Boot 3.1.0配套的MongoDB驱动可能默认使用SCRAM-SHA-1,二者不匹配会引发认证失败。需同时明确认证数据库和机制:

方式1:使用独立配置项

修改application.properties:

spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
spring.data.mongodb.database=documents
spring.data.mongodb.username=adrian
spring.data.mongodb.password=password
spring.data.mongodb.authentication-database=admin
spring.data.mongodb.authentication-mechanism=SCRAM-SHA-256

方式2:使用URI配置

spring.data.mongodb.uri=mongodb://adrian:password@localhost:27017/documents?authSource=admin&authMechanism=SCRAM-SHA-256

2. 确认root用户对documents库的权限

虽然root用户默认拥有全局权限,但可手动验证并授予明确权限:
进入Mongo容器:

docker exec -it mongo-db /bin/bash

执行Mongo命令:

use admin
db.auth('adrian', 'password')
# 授予adrian对documents库的读写权限
db.grantRolesToUser('adrian', [{role: 'readWrite', db: 'documents'}])

3. 验证容器网络连通性

确保Windows本地能正常访问容器内的MongoDB:
在本地执行:

mongosh "mongodb://adrian:password@localhost:27017/documents?authSource=admin"

如果能成功连接,说明网络无问题,问题出在应用配置;如果连接失败,检查Docker端口映射是否正常(27017端口未被其他程序占用)。


内容的提问来源于stack exchange,提问作者arevilla009

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 19:58:38