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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 18:22:16