MongoDB容器创建后,如何通过Bash脚本自动创建新数据库与用户?
可以实现,具体方案如下
核心思路
利用docker exec直接调用容器内的MongoDB Shell(mongosh或旧版mongo),结合传入的参数执行创建数据库和用户的命令,全程无需手动登录Shell,完全通过脚本自动化完成。
1. 编写Bash脚本
创建名为create_mongo_db_user.sh的脚本,接收目标数据库名、新用户名、新用户密码三个参数,同时调用预先配置的管理员账号密码(推荐从环境变量读取,避免硬编码)。
#!/bin/bash # 参数校验 if [ $# -ne 3 ]; then echo "用法: $0 <目标数据库名> <新用户名> <新用户密码>" exit 1 fi # 赋值参数 TARGET_DB=$1 NEW_USER=$2 NEW_PASS=$3 # 从环境变量读取管理员凭据(部署容器时设置的) ADMIN_USER=${MONGO_ADMIN_USER:-admin} ADMIN_PASS=${MONGO_ADMIN_PASS:-your_admin_pass} MONGO_CONTAINER="mongo-container" # 替换为你的容器名/ID # 执行MongoDB创建命令 docker exec -i $MONGO_CONTAINER mongosh --username $ADMIN_USER --password $ADMIN_PASS --authenticationDatabase admin <<EOF use $TARGET_DB db.createUser({ user: "$NEW_USER", pwd: "$NEW_PASS", roles: [{ role: "readWrite", db: "$TARGET_DB" }] }) exit EOF # 检查执行结果 if [ $? -eq 0 ]; then echo "数据库 $TARGET_DB 和用户 $NEW_USER 创建成功" else echo "创建失败,请检查容器状态或参数是否正确" fi
2. 脚本使用步骤
- 给脚本添加执行权限:
chmod +x create_mongo_db_user.sh - 运行脚本(替换为实际参数):
./create_mongo_db_user.sh myapp_db app_user SecurePass123
关键注意事项
- 替换脚本中的
MONGO_CONTAINER为你的MongoDB容器实际名称或ID(可通过docker ps查看) - 管理员账号密码建议通过环境变量传递(比如执行
export MONGO_ADMIN_USER=admin MONGO_ADMIN_PASS=xxx),不要硬编码在脚本里 - 若使用MongoDB 5.0及以下版本,将脚本中的
mongosh替换为mongo命令 - 可根据需求调整用户角色,比如添加
dbAdmin权限只需修改roles数组:{ role: "dbAdmin", db: "$TARGET_DB" }
内容的提问来源于stack exchange,提问作者batta
相关产品推荐
相关产品推荐

