mongodb - 安装卷时,MongoDB 初始化脚本将不起作用
问题描述
我正在尝试使用我的 NodeJs 应用程序和 Mongo DB 建立一个集群。为此,我需要在初始化时为此数据库创建一个数据库和一个用户。如果数据被持久化,那就太酷了,所以我需要挂载一个卷。
我正在使用 Windows 10。
当我挂载一个卷时,初始化脚本将不起作用。它仅在我不安装任何数据量时才有效。我读过初始化脚本仅在data/db
卷为空时执行。有问题吗?
我的docker-compose.yml
:
version: '3.7'
services:
mailer_mongo_db:
container_name: mailer-db
image: mongo:4
env_file: ./.env
environment:
- MONGO_INITDB_ROOT_USERNAME=$MONGO_ROOT_USERNAME
- MONGO_INITDB_ROOT_PASSWORD=$MONGO_ROOT_PASSWORD
- MONGO_INITDB_DATABASE=admin
- MAILER_USERNAME=$MONGO_USERNAME
- MAILER_PWD=$MONGO_PASSWORD
- MAILER_DATABASE=$MONGO_DBNAME
ports:
- 27017:27017
restart: always
volumes:
#- db-data:/data/db
#- /Users/andrz/Documents/Volumes/mailer-mongo-volume:/data/db
- ./mongo-init.sh:/docker-entrypoint-initdb.d/mongo-init.sh:ro
networks:
- mailer
api:
container_name: mailer-api
build: ./
restart: always
volumes:
- ./:/usr/src/api/
depends_on:
- mailer_mongo_db
ports:
- 3000:3000
- 465:465
env_file: ./.env
command: 'npm start'
networks:
- mailer
networks:
mailer:
driver: bridge
volumes:
db-data:
mongo-init.sh
: _
mongo --eval "db.auth('$MONGO_INITDB_ROOT_USERNAME', '$MONGO_INITDB_ROOT_PASSWORD'); db = db.getSiblingDB('$MAILER_DATABASE'); db.createUser({ user: '$MAILER_USERNAME', pwd: '$MAILER_PWD', roles: [{ role: 'readWrite', db: '$MAILER_DATABASE' }] });"
如您所见,有两种挂载数据卷的方法。每个都可以正常工作,但初始化脚本不会执行。
有什么我想念的吗?
解决方案
推荐阅读
- python-3.x - 通过 boto3 在 AWS EC2 上运行 python Flask API
- asynchronous - 如何将 Stream 转换为 Future?
- android - Flutter Firebase 和 Android 问题 - 无法初始化。找不到执行最新(2020 年 9 月)迁移指令的 google-services.json
- python - 在 python 的异步函数中要调用的所有参数是什么?
- javascript - 我的机器人无法使用系统分配的托管标识访问 Blob 存储帐户
- swift - 如何修复segue显示灰屏
- jenkins - 如何在 Jenkins Jobs 中运行代码审查工作流程以编写脚本?
- mysql - 在mysql上加入两个不同的Selects创建的两个表
- html - 多个 Eventemitter 发出 html 中调用的同步函数
- php - 使用我的模型调用未定义方法的 codeigniter 错误