Передача локальных файлов в контейнер docker - docker COPY не обновляется с новыми файлами в каталоге
Я размещаю свои медиа-файлы на том же сервере, на котором размещено мое приложение Django. Время от времени мне нужно добавлять дополнительные файлы, которые будут обслуживаться приложением, например, изображения.
Я настроил так, чтобы NGINX обслуживал все мои медиафайлы в директории под названием /mediafiles внутри моего контейнера docker, это то же самое место, где будут находиться все изображения, загруженные пользователем.
Я хочу добавить несколько файлов в репо, скопировать эти файлы в /mediafiles в контейнере и иметь возможность доступа к ним через приложение (при локальном запуске) или NGINX (при запуске на моем сервере).
Однако я столкнулся с некоторыми проблемами. Я пробовал использовать следующую строку в моем Dockerfile:
COPY ./reponame/mediafiles $APP_HOME/mediafiles
Который работает, но ТОЛЬКО после того, как я выполнил:
docker system prune --volumes
Что я не могу сделать на сервере, потому что именно здесь будут располагаться все загруженные пользователями изображения. Я знаю, что это не оптимальный вариант, так как вы должны использовать внешнее файловое хранилище для пользовательских медиа, но это то, что я могу потратить на мой проект в данный момент, и я не нашел хорошего решения для хранения менее $10 в месяц.
Я пробовал выполнять следующие команды, чтобы не делать полное обрезание системы, но безуспешно - Docker не распознает добавленные/удаленные файлы локально для обновления контейнера.
docker-compose up --build --force-recreate
docker-compose build --no-cache
docker-compose up --build
docker builder prune
Я также думал о монтировании моих локальных "медиафайлов" в контейнер в файле docker-compose, но это не работает и не рекомендуется, насколько я понимаю, из-за конфликта перезаписи файлов в контейнере, т.е. примерно так:
- ./reponame/mediafiles:/home/kontorshund/web/mediafiles
Так что у меня немного нет идей, как двигаться дальше в решении проблемы, буду очень признателен тому, кто лучше разбирается в механизмах Docker, как решить эту проблему.
Оки, не обращайте внимания. Теперь, когда я пробую следующее, все работает нормально, не знаю, что я сделал неправильно в первый раз....,
version: '3.8'
services:
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/home/reponame/web
- static_volume:/home/reponame/web/staticfiles
- ./mediafiles:/home/reponame/web/mediafiles
#- media_volume:/home/reponame/web/mediafiles
ports:
- 8000:8000
env_file:
- ./.env.dev
volumes:
static_volume:
media_volume: