Docker部署MongoDB创建集合报authentication failed认证错误
问题根因
两个问题叠加导致报错:
- 启动命令的持久化挂载路径配置错误。MongoDB官方Docker镜像默认的数据存储目录为
/data/db,你的命令里将卷挂载到了自定义的/data/db1路径,镜像内置的初始化逻辑(负责创建初始root账号、初始化指定数据库)不会在非默认数据目录执行;如果mongo_db卷是之前创建同名称容器遗留的,卷内存有未配置认证的旧MongoDB数据,配置的MONGO_INITDB_*系列环境变量会直接失效,不会生成admin库、也不会创建你预设的管理员账号。 - 未完成身份认证就执行操作。MongoDB开启认证模式后,不登录授权直接执行建库、建集合等操作,会直接抛出13号未授权错误。
修复步骤
- 清理错误实例与残留数据
先停止、删除当前运行的错误容器,如果残留卷内无需要保留的业务数据,直接删除旧持久化卷:sudo docker stop mongodb1 sudo docker rm mongodb1 sudo docker volume rm mongo_db - 修正挂载路径后重新启动容器
将挂载路径改回官方默认的/data/db,执行正确的启动命令:
启动后等待5-10秒,让容器完成首次数据初始化。sudo docker run -d --name mongodb1 -p 27017:27017 -v mongo_db:/data/db \ -e MONGO_INITDB_DATABASE=admin \ -e MONGO_INITDB_ROOT_USERNAME=mongoadmin \ -e MONGO_INITDB_ROOT_PASSWORD=secret mongo:latest - 认证后再执行数据库操作
两种认证方式二选一即可:- 连接时直接携带认证参数,进入shell后直接拥有操作权限:
# 进入容器内的mongo shell sudo docker exec -it mongodb1 mongosh -u mongoadmin -p secret --authenticationDatabase admin - 已经进入无认证状态的shell时,手动在admin库完成认证再操作:
use admin db.auth("mongoadmin", "secret") // 命令返回数字1即代表认证成功 use customer db.createCollection("customerList")
- 连接时直接携带认证参数,进入shell后直接拥有操作权限:
操作完成后执行show dbs可以看到admin、config、local等默认系统库,建集合、读写数据的操作都不会再触发未授权报错。
注意:
MONGO_INITDB_ROOT_USERNAME、MONGO_INITDB_ROOT_PASSWORD两个环境变量仅在持久化卷首次初始化、卷内无任何存量MongoDB数据时生效,只要卷内已有数据,这两个变量会被直接跳过,不会重复创建或覆盖用户。
内容的提问来源于stack exchange,提问作者chun xu
相关产品推荐
相关产品推荐

