Есть ли способ заставить Django перезагружаться после изменений при использовании его с Docker?
Я относительно новичок в Docker/развертывании в целом.
У меня есть приложение django, использующее rpy2 (не уверен, что это важно), которое я развернул с помощью контейнера docker. Однако я хочу иметь возможность продолжать разработку приложения и тестирование в среде docker без необходимости постоянно поднимать и опускать контейнер
Я читал, что использование томов может помочь вернуть эту функциональность, но я либо запустил контейнер и не вижу обновлений, либо получаю ошибки о том, что manae.py не может быть найден.
Есть ли способ вернуть функциональность автозагрузки?
Вот мой Dockerfile:
FROM rocker/r-ver:4.1.1
ENV RENV_VERSION 0.14.0
# Install system dependencies
RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential \
python3-pip \
python3-setuptools \
python3-dev \
libcurl4-openssl-dev \
libssl-dev \
libfontconfig1-dev \
libxml2-dev \
libharfbuzz-dev \
libfribidi-dev \
libfreetype6-dev \
libpng-dev \
libtiff5-dev \
libjpeg-dev \
libbz2-dev \
libopenblas-dev \
unixodbc-dev \
libcairo2-dev \
zlib1g-dev \
curl \
libpq-dev
RUN apt-get update && apt-get install -y cmake
RUN apt-get install -y --no-install-recommends libxt6
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip3 install -r requirements.txt
RUN R -e "install.packages('remotes')"
RUN R -e "remotes::install_github('rstudio/renv@${RENV_VERSION}')"
COPY renv.lock renv.lock
RUN R -e "renv::restore()"
RUN R_HOME=$(R RHOME) && echo "R_HOME=$R_HOME" && export R_HOME
ENV R_HOME=${R_HOME}
COPY custom_package.tar.gz custom_package.tar.gz
RUN R -e "remotes::install_local('custom_package.tar.gz', dependencies = F, force = T, upgrade = 'never')"
RUN R -e "install.packages('glmnet')"
## Expose port to allow app to run locally
EXPOSE 8000
COPY . .
CMD ["python3","manage.py","runserver", "0.0.0.0:8000"]
Вот мой файл docker-compose:
version: '3.8'
services:
django:
image: django-docker:0.0.1
build: .
ports:
- "8000:8000"
environment:
- DEBUG=1
Да, можете. Просто укажите объем каталога приложения, и ваш сервер разработки будет автоматически перезагружаться в зависимости от изменения файлов, как если бы вы разрабатывали в стандартной виртуальной среде python.
version: '3.8'
services:
django:
image: django-docker:0.0.1
build:
context: './app'
ports:
- "8000:8000"
environment:
- DEBUG=1
volumes:
- "./app:/app"
Просто внесите небольшие изменения в конфигурацию docker compose. В этой конфигурации папка docker-compose.yaml
находится в корневом каталоге проекта. Весь Django project
и его Dockerfile
находятся в папке app
в корневом каталоге проекта.
Ключом является сопоставление томов "./app:/app".