Повторный старт тома в Docker
Повторный старт тома не гоняет
скрипты снова,
потому что хранилище
уже не пустое.
Файлы из /docker-entrypoint-initdb.d
образ выполняет только
при первой инициализации
пустого тома данных,
а не при каждом
новом контейнере.
Сначала в init/app.sql
остаётся только таблица notes,
а описание подключает
том againdata
и папку старта:
CREATE TABLE notes (id INT);
Файл compose.yaml
с паролем demo
и базой app
выглядит так:
services:
db:
image: mysql:9.7
environment:
MYSQL_ROOT_PASSWORD: demo
MYSQL_DATABASE: app
volumes:
- againdata:/var/lib/mysql
- ./init:/docker-entrypoint-initdb.d
volumes:
againdata:
Фоновый подъём создаёт
таблицу notes
из скрипта:
docker compose up -d
Затем в тот же SQL-файл
добавляют вторую таблицу extra,
хотя на диске уже лежит
готовая база:
CREATE TABLE notes (id INT);
CREATE TABLE extra (id INT);
Контейнеры проекта убирают
командой docker compose down
без удаления тома againdata:
docker compose down
Новый фоновый подъём
с тем же файлом снова
подключит заполненный том.
Список таблиц в app
содержит notes,
а extra там нет:
docker compose up -d
docker compose exec db mysql -uroot -pdemo app -e "SHOW TABLES"
Добавьте в SQL-файл таблицу patch после первого подъёма на томе retry и пересоздайте контейнер без стирания тома.
Запишите, что patch не появилась, а старые таблицы остались.