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

Docker部署MongoDB创建集合报authentication failed认证错误

问题根因

两个问题叠加导致报错:

  • 启动命令的持久化挂载路径配置错误。MongoDB官方Docker镜像默认的数据存储目录为/data/db,你的命令里将卷挂载到了自定义的/data/db1路径,镜像内置的初始化逻辑(负责创建初始root账号、初始化指定数据库)不会在非默认数据目录执行;如果mongo_db卷是之前创建同名称容器遗留的,卷内存有未配置认证的旧MongoDB数据,配置的MONGO_INITDB_*系列环境变量会直接失效,不会生成admin库、也不会创建你预设的管理员账号。
  • 未完成身份认证就执行操作。MongoDB开启认证模式后,不登录授权直接执行建库、建集合等操作,会直接抛出13号未授权错误。
修复步骤
  1. 清理错误实例与残留数据
    先停止、删除当前运行的错误容器,如果残留卷内无需要保留的业务数据,直接删除旧持久化卷:
    sudo docker stop mongodb1
    sudo docker rm mongodb1
    sudo docker volume rm mongo_db
    
  2. 修正挂载路径后重新启动容器
    将挂载路径改回官方默认的/data/db,执行正确的启动命令:
    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
    
    启动后等待5-10秒,让容器完成首次数据初始化。
  3. 认证后再执行数据库操作
    两种认证方式二选一即可:
    • 连接时直接携带认证参数,进入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")
      

操作完成后执行show dbs可以看到admin、config、local等默认系统库,建集合、读写数据的操作都不会再触发未授权报错。

注意:MONGO_INITDB_ROOT_USERNAME、MONGO_INITDB_ROOT_PASSWORD两个环境变量仅在持久化卷首次初始化、卷内无任何存量MongoDB数据时生效,只要卷内已有数据,这两个变量会被直接跳过,不会重复创建或覆盖用户。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 11:36:19