Скрипт оболочки в Docker
Скрипт оболочки в том же каталоге
выполняет команды,
а не только текст SQL.
Имя файла должно
заканчиваться на .sh,
иначе стартовый механизм
не запустит его как программу.
В init/app.sh
первая строка задаёт интерпретатор,
далее идёт вызов mysql,
который создаёт таблицу marks.
Пароль root берётся
из переменной окружения
внутри сценария:
#!/bin/sh
mysql -uroot -p"$MYSQL_ROOT_PASSWORD" app -e "CREATE TABLE marks (id INT);"
Сервис db с базой app,
паролем demo,
томом shdata
и папкой старта монтируют так:
services:
db:
image: mysql:9.7
environment:
MYSQL_ROOT_PASSWORD: demo
MYSQL_DATABASE: app
volumes:
- shdata:/var/lib/mysql
- ./init:/docker-entrypoint-initdb.d
volumes:
shdata:
Фоновый подъём на образе
mysql:9.7:
docker compose up -d
Проверка внутри сервиса
показывает таблицу marks
в базе app:
docker compose exec db mysql -uroot -pdemo app -e "SHOW TABLES LIKE 'marks'"
Создайте сценарий с расширением .sh, который через клиент заводит таблицу scores в базе app на томе labdata.
Убедитесь, что пароль в сценарии читается из окружения контейнера, а не из текста файла.