Скрипт инициализации MongoDB не будет работать при монтировании тома

#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. вы нашли решение?