Не выполняются скрипты из 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 написано что существует? Она разве не должна пересоздаваться при перезапуске контейнеров и повторно инициализаироваться? Где хранятся файлы этой базы?


Ответы (0 шт):