Повторный старт тома в Docker
Повторный старт тома не гоняет
скрипт снова,
потому что хранилище
уже не пустое.
Файлы из /docker-entrypoint-initdb.d
образ выполняет только
при первой инициализации
пустого тома данных,
а не при каждом
новом контейнере.
Сначала в init/app.js
остаётся только запись
hello,
а описание подключает
том againdata
и папку старта:
db = db.getSiblingDB('app');
db.notes.insertOne({ text: 'hello' });
services:
db:
image: mongo:8.3
volumes:
- againdata:/data/db
- ./init:/docker-entrypoint-initdb.d
volumes:
againdata:
Фоновый подъём создаёт
документ hello
из скрипта:
docker compose up -d
Затем в тот же JavaScript
добавляют вторую вставку
extra,
хотя на диске уже лежит
готовая база:
db = db.getSiblingDB('app');
db.notes.insertOne({ text: 'hello' });
db.notes.insertOne({ text: 'extra' });
Контейнеры проекта убирают
командой docker compose down
без удаления тома againdata:
docker compose down
Новый фоновый подъём
с тем же файлом снова
подключит заполненный том.
В коллекции notes
есть hello,
а документа extra
там нет -
опишите это словами
после короткого поиска:
docker compose up -d
docker compose exec db mongosh --quiet app --eval "db.notes.find({ text: 'extra' }).toArray()"
Добавьте в JavaScript-файл документ patch после первого подъёма на томе retry и пересоздайте контейнер без стирания тома.
Запишите, что patch не появился, а старый документ остался.