docker-compose как загрузить дамп базы только 1 раз?

Необходимо сохраниыть докер образ в файл и потом передавать их "на проверку" на флешке. Образ с базой данных должен содержать накаченный дамп.

Пробую собирать образ из Dockerfile:

FROM postgres:12.4-alpine
ADD ./dump/dump.sql /docker-entrypoint-initdb.d 

А потом запускаю это всё через docker-composel:

version: '3'
services:
  postgres:
    image: my_custom_image
    environment:
      PGDATA: /var/lib/postgresql/data
      POSTGRES_DB: ${DB_NAME}
      POSTGRES_USER: ${DB_USER}
      POSTGRES_PASSWORD: ${DB_PASS}
    ports:
      - ${DB_PORT}:5432

Проблема заключается в том, что дамп накатывается каждый раз при старте контейнера, что ведёт например к тому что остальные контейнеры могут не дождаться накатки дампа и упасть по таймауту подключения к бд.

Как можно накатить дамп 1 раз, чтобы при старте контейнера с базой все данные были уже заполнены?

Вернее так - как сделать образ, чтобы он уже содержал уже накаченный дамп? Чтобы соответственно человек подниал контейнер из этого образа и в контейнере уже была бы заполненная база.


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

Автор решения: Sergey Mitrofanov

Выполнить накат дампа в процессе сборки контейнера? Или развернуть дамп локально и скопировать каталог данных в контейнер. И при старте это уже не нужно будет.

Если же такой вариант не возможен, то при старте других контейнеров можно учесть время развертывания БД, например до одной минуты. и добавить это в entrypoint.sh

sleep 1m
java -jar ...
→ Ссылка