Есть файл инициализации - init.sql
CREATE DATABASE IF NOT EXISTS appDB;
CREATE USER IF NOT EXISTS 'user'@'%' IDENTIFIED BY 'password';
GRANT SELECT,UPDATE,INSERT TO 'user'@'%';
FLUSH PRIVILEGES;
USE appDB;
CREATE TABLE IF NOT EXISTS users (
ID INT(11) NOT NULL AUTO_INCREMENT,
name VARCHAR(20) NOT NULL,
surname VARCHAR(40) NOT NULL,
PRIMARY KEY (ID)
);
INSERT INTO users (name, surname)
SELECT * FROM (SELECT 'Alex', 'Rover') AS tmp
WHERE NOT EXISTS (
SELECT name FROM users WHERE name = 'Alex' AND surname = 'Rover'
) LIMIT 1;
INSERT INTO users (name, surname)
SELECT * FROM (SELECT 'Bob', 'Marley') AS tmp
WHERE NOT EXISTS (
SELECT name FROM users WHERE name = 'Bob' AND surname = 'Marley'
) LIMIT 1;
INSERT INTO users (name, surname)
SELECT * FROM (SELECT 'Alex', 'Rover') AS tmp
WHERE NOT EXISTS (
SELECT name FROM users WHERE name = 'Alex' AND surname = 'Rover'
) LIMIT 1;
INSERT INTO users (name, surname)
SELECT * FROM (SELECT 'Kate', 'Yandson') AS tmp
WHERE NOT EXISTS (
SELECT name FROM users WHERE name = 'Kate' AND surname = 'Yandson'
) LIMIT 1;
INSERT INTO users (name, surname)
SELECT * FROM (SELECT 'Lilo', 'Black') AS tmp
WHERE NOT EXISTS (
SELECT name FROM users WHERE name = 'Lilo' AND surname = 'Black'
) LIMIT 1;
Создаю docker-compose.yml, монтирую этот файл в необходимую директорию:
version: "3.8"
services:
db:
image: "mysql:latest"
command: --default-authentication-plugin=mysql_native_password
restart: always
environment:
MYSQL_ROOT_PASSWORD: 1
volumes:
- /DB:/docker-entrypoint-initdb.d
В папке DB как раз лежит этот init.sql
Запускаю композ, всё проходит нормально. Заходим в контейнер:
docker exec -it 1_db_1 bash
cd docker-entrypoint-initdb.d
ls
Директория не пустая, создалась куча файлов.
Заходим в sql:
mysql -u root -p
> SHOW DATABASES;
В списке нет appDB, нет вообще никаких признаков, что скрипт как-то сработал.
Что я делаю не так?