错误信息,MongoServerError: Authentication failed
表示身份验证失败。可能的原因和解决步骤如下:
1. 确认用户和密码
确保您在创建用户时输入的用户名和密码是正确的。在 MongoDB 中,用户名和密码是区分大小写的。请确保在连接时使用正确的大小写。
2. 确认用户的权限
确保您在创建用户时设置了足够的权限。例如,使用以下命令创建用户:
use admin
db.createUser({
user: "adminUser",
pwd: "yourPassword",
roles: [{ role: "userAdminAnyDatabase", db: "admin" }]
})
该用户应该有足够的权限来访问您尝试连接的数据库。
3. 检查 MongoDB 配置
确保您在启动 MongoDB 容器时正确启用了身份验证。使用以下命令启动容器:
sudo docker run -d \
--name mongodb \
-p 27017:27017 \
-v /path/to/your/data:/data/db \
mongo --auth
4. 使用正确的身份验证数据库
在连接时,确保使用 --authenticationDatabase admin
。这是因为您创建用户时是使用 admin
数据库。
5. 重新创建用户(可选)
如果您仍然遇到问题,可以尝试删除现有容器并重新创建用户:
-
停止并删除当前 MongoDB 容器:
(删除容器,之前的数据库内容也会随之删除)sudo docker stop mongodb sudo docker rm mongodb
-
重新启动 MongoDB 容器并启用身份验证:
sudo docker run -d \ --name mongodb \ -p 27017:27017 \ -v /path/to/your/data:/data/db \ mongo --auth
-
进入 MongoDB 容器并创建用户:
sudo docker exec -it mongodb mongosh
在 MongoDB Shell 中执行以下命令:
use admin db.createUser({ user: "adminUser", pwd: "yourPassword", roles: [{ role: "userAdminAnyDatabase", db: "admin" }] })
6. 使用 MongoDB Shell 验证连接
在创建用户后,尝试使用以下命令连接:
sudo docker exec -it mongodb mongosh -u adminUser -p yourPassword --authenticationDatabase admin
7. 检查 Docker 网络配置
确保您的 Docker 网络设置没有问题。有时,Docker 网络配置可能会影响连接。确保您可以通过 localhost
或 127.0.0.1
访问 MongoDB。
8.添加身份验证成功后,防火墙端口要放行-27017
9. 查看 MongoDB 日志
如果问题仍然存在,您可以查看 MongoDB 的日志以获取更详细的错误信息。您可以在容器中使用以下命令查看日志:
sudo docker logs mongodb