РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
⊗dcMyInAg 15 of 25 menu
◀ ▶

Повторный старт тома в 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 не появилась, а старые таблицы остались.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить