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

Docker环境MongoDB 6.0初始化失败:认证错误问题求助

Docker下MongoDB 6.0数据库初始化方案

问题原因

你的初始化脚本在MongoDB 6.0中认证失败,核心原因是:脚本执行时默认连接的是test数据库,调用db.auth()会尝试在当前数据库(test)下认证admin用户,但你的root用户是创建在admin数据库中的,因此导致认证失败。MongoDB 6.0对认证上下文的校验更严格,之前5.0的隐式兼容逻辑不再生效。

修正方案

方案一:修正JS脚本

直接修改原init-mongo.js,先切换到admin数据库再执行认证,确保上下文正确:

// 切换到root用户所在的admin数据库
use admin;
// 认证root用户
db.auth("admin", "MyPassw0rd_123");
// 切换到目标业务数据库
db = db.getSiblingDB("RecipientService");
// 创建业务集合
db.createCollection('RecipientAggregate');
// 创建业务用户
db.createUser({
    user: "wfuser",
    pwd: "MyPassw0rd_",
    roles: [{
        role: "readWrite",
        db: "RecipientService"
    }]
});

方案二:使用Shell脚本调用mongosh

如果担心JS脚本的兼容性问题,可以改用.sh脚本,直接通过mongosh命令行参数指定认证信息,避免脚本内的上下文混淆:
创建init-mongo.sh文件,内容如下:

#!/bin/bash
mongosh admin -u admin -p MyPassw0rd_123 <<EOF
use RecipientService;
db.createCollection('RecipientAggregate');
db.createUser({
    user: "wfuser",
    pwd: "MyPassw0rd_",
    roles: [{
        role: "readWrite",
        db: "RecipientService"
    }]
});
EOF

给脚本添加执行权限:chmod +x init-mongo.sh,再挂载到容器的/docker-entrypoint-initdb.d/目录。

容器启动配置

无论用哪种方案,启动MongoDB 6.0容器时必须设置root用户的环境变量,确保初始化阶段创建好root用户。以docker-compose为例:

version: '3.8'
services:
  mongodb:
    image: mongo:6.0
    environment:
      MONGO_INITDB_ROOT_USERNAME: admin
      MONGO_INITDB_ROOT_PASSWORD: MyPassw0rd_123
    volumes:
      # 替换为你的脚本路径,JS脚本写./init-mongo.js,Shell脚本写./init-mongo.sh
      - ./init-mongo.js:/docker-entrypoint-initdb.d/init-mongo.js
      - mongodb_data:/data/db
    ports:
      - "27017:27017"
volumes:
  mongodb_data:

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 16:40:39