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

Docker Compose部署MongoDB时出现UserNotFound认证错误

Docker Compose部署MongoDB时出现UserNotFound认证错误

看起来你遇到的是MongoDB认证时的用户找不到问题,我帮你梳理下原因和解决办法~

首先得明确一个容易踩的坑:你在环境变量里设置了MONGO_INITDB_DATABASE: DB,这个变量是用来指定初始化脚本(如果有的话)运行的目标数据库,但root用户eagle是默认创建在admin系统数据库下的,并不是你指定的DB库。如果你的连接工具或代码直接用DB作为认证数据库,就会出现找不到用户的认证失败问题。

下面给你两种解决思路:

  • 方法1:连接时明确指定认证数据库为admin
    不管用命令行还是客户端工具,连接时要加上authSource=admin参数,告诉MongoDB去admin库找你的root用户。比如用mongosh命令连接的话:

    mongosh "mongodb://eagle:123@localhost:27017/DB?authSource=admin"
    

    如果是代码里的连接字符串,同样要加上这个参数,就能正常认证了。

  • 方法2:创建DB库的专用业务用户(推荐)
    为了更安全,也避免每次连接都要指定authSource,你可以给DB库创建一个专用用户,步骤如下:

    1. 新建一个本地目录./mongo-init,在里面创建初始化脚本init-user.js:
      // 切换到目标DB库
      db = db.getSiblingDB('DB');
      // 创建该库的专用用户,赋予库所有者权限
      db.createUser({
        user: 'eagle_db',
        pwd: '123',
        roles: [{ role: 'dbOwner', db: 'DB' }]
      });
      
    2. 修改你的docker-compose.yml,把脚本目录挂载到MongoDB容器的初始化目录(容器会自动执行这里的脚本):
      version: '3.9'
      services:
        mongo:
          image: mongo:latest
          restart: always
          container_name: mongodb
          ports:
            - '27017:27017'
          volumes:
            - mongodb:/data/db
            - ./mongo-init:/docker-entrypoint-initdb.d  # 新增这一行挂载初始化脚本
          environment:
             MONGO_INITDB_ROOT_USERNAME: eagle
             MONGO_INITDB_ROOT_PASSWORD: 123
             MONGO_INITDB_DATABASE: DB
      
      volumes:
        mongodb: {}
      
    3. 因为MongoDB的初始化脚本只会在第一次创建数据卷时执行,所以需要先删除旧数据卷再重启:
      docker-compose down -v
      
    4. 重新启动容器:
      docker-compose up -d
      

    之后你就可以直接用eagle_db用户连接DB库,无需额外指定认证数据库了。

另外要注意:如果之前已经启动过容器,只修改配置是没用的,必须删除数据卷才能触发重新初始化流程。

备注:内容来源于stack exchange,提问作者Raúl Peñate

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 13:00:30