MongoDB容器未创建指定数据库与用户的问题求助
问题解决:MongoDB容器未自动创建指定数据库和普通用户
核心原因
MongoDB官方社区镜像(mongodb/mongodb-community-server)仅会自动处理MONGODB_INITDB_ROOT_USERNAME和MONGODB_INITDB_ROOT_PASSWORD来创建root管理员用户,MONGO_INITDB_USER、MONGO_INITDB_PWD、MONGO_INITDB_DATABASE这些变量不会自动触发数据库和普通用户的创建——这些变量只是提供给自定义初始化脚本的环境变量,需要手动编写脚本完成创建逻辑。
解决步骤
- 创建初始化脚本
在项目目录下新建./db/mongo/init-user.js文件,写入以下内容:
// 连接到目标数据库 db = db.getSiblingDB(process.env.MONGO_INITDB_DATABASE); // 创建普通用户并赋予该数据库读写权限 db.createUser({ user: process.env.MONGO_INITDB_USER, pwd: process.env.MONGO_INITDB_PWD, roles: [ { role: "readWrite", db: process.env.MONGO_INITDB_DATABASE } ] });
- 修改docker-compose配置
更新mongo服务的volumes配置,将初始化脚本挂载到容器的/docker-entrypoint-initdb.d/目录(镜像启动时会自动执行该目录下的所有JS/Shell脚本):
mongo: image: mongodb/mongodb-community-server volumes: - type: bind source: ./db/mongo target: /data/db - type: bind source: ./db/mongo/init-user.js target: /docker-entrypoint-initdb.d/init-user.js env_file: .env
- 清理旧数据(关键)
MongoDB初始化脚本只会在首次启动且数据目录为空时执行,所以需要先清理之前挂载的旧数据(注意备份重要数据):
# 停止容器 docker-compose down # 清理数据目录 rm -rf ./db/mongo/*
- 重新启动容器
docker-compose up -d
验证
启动完成后,通过MongoExpress或Studio 3T使用conway用户连接conwaysgame数据库,即可正常访问。
内容的提问来源于stack exchange,提问作者Reda Bourial
相关产品推荐
相关产品推荐

