Есть ли способ заставить 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".

Вернуться на верх