Как сделать импорт бд в docker-compose контенер?

имеется docker-compose.yml

services:
  web:
    build: ./php
    environment:
      - APACHE_RUN_USER=#1000
    volumes:
      - ${APP_PATH_HOST}:${APP_PATH_CONTAINER}
    ports:
      - 8080:80
    working_dir: ${APP_PATH_CONTAINER}
  db:
    image: mariadb
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: test
    volumes:
      - ./db:/var/lib/mysql
      - ./migr:/usr/data

  adminer:
    image: adminer
    restart: always
    ports:
      - 6080:8080

В папке migr хранятся 3 sql дампа баз, как их импортировать в базу данных в контейнере db, при сборке проекта?


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

Автор решения: 7-zete-7

В данном docker-compose.yml для базы данных используется образ mariadb.

На странице данного образа в разделе Initializing a fresh instance сказано что инициализирующие файлы можно поместить в директорию /docker-entrypoint-initdb.d (поддерживаются расширения фалов .sh, .sql, .sql.gz, .sql.xz и .sql.zst).

Измените строчку монтирования volume ./migr так, что бы монтирование происходило в /docker-entrypoint-initdb.d. Таким образом база данных будет инициализироваться содержимым директории ./migr каждый раз при создании нового контейнера. Т.е. подключить инициализацию, желательно, только один раз, т.к. далее данные уже будут находиться в базе (из-за того что есть монтирование /var/lib/mysql), после первой успешной инициализации следует отключить монтирование ./migr что бы избежать ошибок и потери данных.

→ Ссылка