Docker. Как заполнить объем при запуске

Я использую docker-compose для запуска проекта Django.

Моя цель состоит в том, чтобы docker стартовал с существующими данными (статикой, базой данных и всем содержимым медиа-каталога).

В настоящее время статика собирается и распределяется по томам. База данных начинается с подготовленного дампа.

<<<Каталог

/media добавлен в .dockerignore

Вопрос в том, как правильно заполнить медиа-том из каталога медиа при первом запуске docker compose (то есть когда медиа-том еще пуст)?

docker-compose.yaml файл:

volumes:
  mysql_data:
  static:
  media:

services:

  db:
    image: mysql:8.0
    restart: always
    volumes:
      - mysql_data:/var/lib/mysql
      - ./database_dump.sql:/docker-entrypoint-initdb.d/dump.sql
    environment:
      - MYSQL_DATABASE=${MYSQL_DATABASE}
      - MYSQL_USER=${MYSQL_USER}
      - MYSQL_PASSWORD=${MYSQL_PASSWORD}
      - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
    env_file:
      - .env

  backend:
    build: ./
    depends_on:
      - db
    restart: always
    volumes:
      - static:/app/static/
      - media:/app/media/
    env_file:
      - .env

  nginx:
    build: ./gateway/
    depends_on:
      - backend
    ports:
      - "8000:80"
    restart: always
    volumes:
      - static:/static/
      - media:/media/

Dockerfile:

FROM python:3.11
WORKDIR /app
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
ENV DJANGO_SETTINGS_MODULE='app.settings'
RUN apt-get update && apt-get install -y netcat-openbsd
COPY ./requirements.pip ./
RUN  pip install --upgrade pip && pip install -r requirements.pip --no-cache-dir
COPY . .
RUN python manage.py collectstatic --no-input
RUN chmod +x ./entrypoint.sh
EXPOSE 8000
ENTRYPOINT ["./entrypoint.sh"]

entrypoint.sh:

#!/bin/sh
echo "Waiting for MySQL..."
while ! nc -z $MYSQL_HOST $MYSQL_PORT; do
  sleep 0.1
done
echo "MySQL started"
python manage.py migrate --no-input
gunicorn app.asgi:application \
    --bind 0.0.0.0:8000 \
    --workers 8 \
    --worker-class uvicorn.workers.UvicornWorker
exec "$@"
Вернуться на верх