Не выполняются скрипты из docker-entrypoint-initdb.d в докере
У меня не выполняются скрипты инициализации базы данных при разворачивании связки php+apache+mysql. Вот такие скрипты для докера у меня:
docker-compose.yml
version: '3'
services:
php:
build:
context: .
dockerfile: Dockerfile
volumes:
- ./src:/var/www/html
ports:
- 8080:80
depends_on:
- mysql
mysql:
image: mysql:latest
ports:
- 3306:3306
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: lab
MYSQL_USER: aoizora
MYSQL_PASSWORD: 123
volumes:
- ./mysql_data:/var/lib/mysql
- ./sql/schema.sql:/docker-entrypoint-initdb.d/1.sql
- ./sql/data.sql:/docker-entrypoint-initdb.d/2.sql
volumes:
mysql_data:
Dockerfile
FROM php:7.4-apache
COPY src/ /var/www/html/
RUN docker-php-ext-install mysqli && docker-php-ext-enable mysqli
Скрипты инициализации базы:
schema.sql:
create database lab;
use lab;
create table users
(
id INT,
username VARCHAR(35),
password VARCHAR(45)
);
data.sql
use lab;
insert into users values(1, 'admin', 'trytoguess');
insert into users values(2, 'test', 'test');
insert into users values(3, 'hello', 'hello');
Сначала при запуске контейнера выдавалась ошибка, что скрипты не могут быть выполнены, потому что база lab существует. Когда я добавил в скрипты create if not exists, ошибка пропала, но таблицы БД все равно не создаются.
Почему скрипты не выполняются и как это исправить? Почему при перезапуске контейнеров база данных lab написано что существует? Она разве не должна пересоздаваться при перезапуске контейнеров и повторно инициализаироваться? Где хранятся файлы этой базы?