Как правильно запустить файл SQL для инициализации базы данных в контейнере Docker?

Как создать две таблицы в базе данных docker-контейнера, используя sql-файл для выполнения этой операции относительно docker-compose? Учитывая, что в docker-compose также будет настроена вторая база данных, в которой необходимо будет создать две таблицы через другой файл.
  • 7 июня 2024 г. 18:01
Ответы на вопрос 2
Для инициализации базы данных в контейнере Docker с помощью SQL файла, можно использовать команду docker exec:

1. Переместите SQL файл именно в тот каталог в контейнере, где обычно загружаются начальные данные (например, /docker-entrypoint-initdb.d/ для контейнера с базой данных MySQL).

2. Запустите контейнер с указанием пути к вашему SQL файлу:

```
docker run --name=my-database -v /path/to/sql/file.sql:/docker-entrypoint-initdb.d/init.sql -d my-database-image
```

3. Подключитесь к контейнеру и выполните SQL команду вручную:

```
docker exec -i my-database mysql -uroot -ppassword mydatabase < /docker-entrypoint-initdb.d/init.sql
```

Другой способ - использование docker-compose:

1. Добавьте раздел volumes в ваш файл docker-compose.yml для каждой базы данных, указав путь к соответствующему SQL файлу:

```
volumes:
  - /path/to/sql/file/db1.sql:/docker-entrypoint-initdb.d/init_db1.sql
  - /path/to/sql/file/db2.sql:/docker-entrypoint-initdb.d/init_db2.sql
```

2. Создайте сервис для каждой базы данных, указав необходимые параметры, включая volumes:

```
services:
  db1:
    image: my-db1-image
    volumes:
      - /path/to/sql/file/db1.sql:/docker-entrypoint-initdb.d/init_db1.sql

  db2:
    image: my-db2-image
    volumes:
      - /path/to/sql/file/db2.sql:/docker-entrypoint-initdb.d/init_db2.sql
```

3. Запустите docker-compose:

```
docker-compose up
```

Теперь при запуске контейнеров, SQL файлы будут автоматически загружены и выполнены для каждой базы данных.
Проще всего сделать так: 
1 создаете папку initDatabase1 рядом с docker-compose-файлом
2 в эту папку скопируйте все SQL-файлы, которые должны выполнится после старта БД
3 в docker-compose в секции с db1 добавьте:
volumes:
      - ./initDatabase1:/docker-entrypoint-initdb.d

Для второй БД создайте папку initDatabase2 и поместите туда соответствующие SQL-файлы, а в секцию с db2:
volumes:
      - ./initDatabase2:/docker-entrypoint-initdb.d
Похожие вопросы