Docker部署MongoDB后Kotlin协程驱动连接认证失败求助
解决MongoDB认证失败问题
问题原因
你的错误日志显示:
com.mongodb.MongoSecurityException: Exception authenticating MongoCredential{mechanism=SCRAM-SHA-1, userName='root', source='testdb', password=, mechanismProperties=}
问题出在认证源数据库不匹配:通过MONGO_INITDB_ROOT_USERNAME创建的root用户,默认存储在MongoDB的admin系统数据库中,但你的连接字符串指定了testdb作为认证源,驱动尝试在testdb库中验证root用户,导致认证失败。
解决方案
方案1:修改连接字符串,指定认证源为admin
直接在连接URL后添加authSource=admin参数,明确告诉驱动用admin库验证root用户:
val client = MongoClient.create("mongodb://root:rootpassword@localhost/testdb?authSource=admin") val database = client.getDatabase(databaseName)
方案2:通过MongoClientSettings显式配置认证信息
如果需要更灵活的配置,可以用MongoClientSettings指定认证数据库:
import com.mongodb.ConnectionString import com.mongodb.MongoCredential import com.mongodb.client.MongoClient import com.mongodb.client.MongoClients import com.mongodb.client.MongoDatabase // 构建配置 val settings = MongoClientSettings.builder() .applyConnectionString(ConnectionString("mongodb://localhost")) .credential( MongoCredential.createScramSha1Credential( "root", "admin", // 明确指定认证数据库为admin "rootpassword".toCharArray() ) ) .build() // 创建客户端并连接testdb val client: MongoClient = MongoClients.create(settings) val database: MongoDatabase = client.getDatabase("testdb")
额外注意事项
如果之前已经启动过MongoDB容器,本地数据卷可能已经存储了旧的用户配置,导致修改后不生效。可以先删除数据卷再重新启动:
docker-compose down -v docker-compose up -d
内容的提问来源于stack exchange,提问作者Willi Mentzel
相关产品推荐
相关产品推荐

