docker compose именованные тома
Немного не до конца понимаю, как правильно описывать тома для совместного использования между контейнерами
Что имею:
- Контейнер с приложением фронта и запущенным Django (якорь elk_dm4_app) с помощью wsgi.py и gunicorn (структура директорий в контейнере ниже)
elk_dm4
├── backend
| //Джанго приложение
│ ├── api
| | └── ...
| ├── collectedstatic
| | └── ...
│ ├── elk_dm4
│ │ ├── ...
│ │ ├── settings.py
| | ├── wsgi.py
│ │ └── ...
│ ├── index
| | └── ...
│ ├── manage.py
└── frontend
└── ...
- Сервис для запуска
collectstatic(docker-compose.yaml)
services:
...
collectstatic:
<<: *elk_dm4_app
command: bash -c "python ./backend/manage.py collectstatic --no-input && python ./backend/manage.py createsuperuser"
restart: on-failure
depends_on:
- app
Команда collectstatic собирает статические файлы в директорию
/elk_dm4/backend/collectedstatic
- Сервис nginx:
services:
...
nginx:
build: _docker/nginx
ports:
- 8000:8000
depends_on:
- app
- collectstatic
Вопрос:
Как сделать контейнеру с nginx видимой папку /elk_dm4/backend/collectedstatic из контейнера collectstatic?
Пробовал поиграться с именованными внутренними томами, но только запутался, либо получалось, что в контейнере nginx видна эта директория по странному адресу и без результатов collectstatic
Ответы (1 шт):
В общих чертах это работает предельно просто:
version: "3.0"
volumes:
# Объявляем том
my_volume: {}
services:
collectstatic:
...
volumes:
# монтируем том под сборку статики
- my_volume:/elk_dm4/backend/collectedstatic
# что:куда
nginx:
...
volumes:
# монтируем том под раздачу статики
- my_volume:/var/www
В разделе volumes создается том, после чего этот том подсовывается в нужные места в контейнерах. Данные в томе обновляются без задержек (это по сути одна и та же директория), так что NGINX увидит файлы как только они там появятся. Как они будут раздаваться уже зависит от конфигурации NGINX.