#mongodb #docker #docker-compose
#mongodb #docker #docker-compose
Вопрос:
Я пытаюсь настроить кластер с помощью моего приложения NodeJS и базы данных Mongo. Для этого мне нужно создать базу данных и пользователя для этой базы данных при инициализации. А также было бы здорово, если бы данные сохранялись, поэтому мне нужно смонтировать том.
Я использую 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' }] });"
Как вы можете видеть, существует два способа монтирования тома данных. Каждый из них работает нормально, но скрипт инициализации не выполняется.
Я чего-то не понимаю?
Комментарии:
1. вы нашли решение?