Скрипт оболочки в Docker
Скрипт оболочки из того же
каталога вызывает psql
и тоже срабатывает только
на пустых данных.
Имя файла должно
заканчиваться на .sh,
иначе стартовый механизм
не запустит его как программу.
В init/app.sh
первая строка задаёт интерпретатор,
далее идёт вызов psql
от имени postgres,
который создаёт таблицу marks:
#!/bin/sh
psql -U postgres -c "CREATE TABLE marks (id INT);"
Сервис db с паролем demo,
томом shdata
на /var/lib/postgresql
и папкой старта монтируют так:
services:
db:
image: postgres:18
environment:
POSTGRES_PASSWORD: demo
volumes:
- shdata:/var/lib/postgresql
- ./init:/docker-entrypoint-initdb.d
volumes:
shdata:
Фоновый подъём на образе
postgres:18:
docker compose up -d
Проверка внутри сервиса
показывает таблицу marks
в схеме public:
docker compose exec db psql -U postgres -c "\dt marks"
Создайте сценарий с расширением .sh, который через клиент под пользователем postgres заводит таблицу scores на томе store.
Убедитесь, что таблица scores появилась после первого подъёма на пустом хранилище.