Повторный старт тома в Docker
Повторный старт с тем же томом
не выполняет новый скрипт,
потому что каталог данных
уже заполнен.
Файлы из /docker-entrypoint-initdb.d
образ выполняет только
при первой инициализации
пустого хранилища,
а не при каждом
новом контейнере.
Сначала в init/app.sql
остаётся только таблица notes,
а описание подключает
том againdata
и папку старта:
CREATE TABLE notes (id INT);
Файл compose.yaml
с паролем demo
выглядит так:
services:
db:
image: postgres:18
environment:
POSTGRES_PASSWORD: demo
volumes:
- againdata:/var/lib/postgresql
- ./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
Новый фоновый подъём
с тем же файлом снова
подключит заполненный том.
Список таблиц содержит notes,
а extra там нет:
docker compose up -d
docker compose exec db psql -U postgres -c "\dt"
Добавьте в SQL-файл таблицу patch после первого подъёма на томе store и пересоздайте контейнер без стирания тома.
Запишите, что patch не появилась, а старая таблица осталась.