Воссоздание контейнера MongoDB не перезапускает файл config.js в docker-entrypoint-initdb.d - PullRequest
0 голосов
/ 06 июня 2019

У меня проблема с MongoDB.Я предоставляю файл config.js - docker-entrypoint-initdb.d в моем файле docker-compose:

mongo:
  image: mongo:latest
  restart: always
  ports:
    - 27017:27017
  environment:
    MONGO_INITDB_ROOT_USERNAME: root
    MONGO_INITDB_ROOT_PASSWORD: example
    MONGO_INITDB_DATABASE: dev
  volumes:
    - ./config.js:/docker-entrypoint-initdb.d/config.js
    - mongodbdata:/data/db

Файл config.js выглядит следующим образом:

db.auth('root', 'example');

db = db.getSiblingDB('dev');

db.approver.insert({"email":"some@email.com,"approverType":"APPROVER"});
db.approver.insert({"email":"someother@email.com","approverType":"ACCOUNTANCY"});

Когда я запускаю docker-compose up -d в первый раз все нормально, две записи вставляются в базу данных.

Но затем я хочу добавить запись trird и воссоздать контейнер:

db.auth('root', 'example');

db = db.getSiblingDB('dev');

db.approver.insert({"email":"some@email.com,"approverType":"APPROVER"});
db.approver.insert({"email":"someother@email.com","approverType":"ACCOUNTANCY"});
db.approver.insert({"email":"another@email.com","approverType":"ACCOUNTANCY"});

Я бегу docker-compose up -d --force-recreate --no-deps mongo ничего не происходит.Контейнер воссоздается, но третьей записи там нет.

Выполнение docker exec -it dev_mongo_1 mongo docker-entrypoint-initdb.d/config.js возвращает:

MongoDB shell version v4.0.10
connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("d44b8e0a-a32c-4da0-a02b-c3f71d6073dd") }
MongoDB server version: 4.0.10
Error: Authentication failed.

Есть ли способ воссоздать контейнер для повторного запуска сценария?Или запустить команду mongo, которая перезапустит скрипт в работающем контейнере?

1 Ответ

0 голосов
/ 06 июня 2019

В скрипте запуска mongodb есть проверка необходимости инициализации: https://github.com/docker-library/mongo/blob/40056ae591c1caca88ffbec2a426e4da07e02d57/3.6/docker-entrypoint.sh#L225

    # check for a few known paths (to determine whether we've already initialized and should thus skip our initdb scripts)
    if [ -n "$shouldPerformInitdb" ]; then
    ...

так что, вероятно, это делается только один раз во время инициализации БД, а затем, поскольку вы сохраняете состояние БД с помощью mongodbdata:/data/db, он не будет инициализироваться.

Чтобы исправить это, попробуйте ввести docker-compose down -v, что удалит данные из вашей БД и позволит снова запустить инициализацию.

...