Docker не отражает изменение кода в контейнере docker

У меня есть приложение Django, которое запускается в контейнере Docker локально на машине Mac. Этот docker-контейнер управляется с помощью docker-compose. Приложение Django настроено на перезагрузку при изменении его кода.

Однако, и это проблема, когда я изменяю код приложения, сервер по умолчанию Django перезагружает службу, но изменения не отражаются в контейнере. Ответ API не меняется. Вот моя конфигурация docker:

Dockerfile

FROM python:2-slim
RUN apt-get update && apt-get install -y build-essential

COPY requirements /requirements
RUN pip install -r /requirements/build.txt

# copy app source into image
COPY service_api /opt/service_api
COPY manage.py /opt

docker-compose.yml

version: '3.7'

services:
  service-django:
    image: service-django
    build:
      dockerfile: Dockerfile
      context: .
    ports:
      - 8000:8000
    volumes:
      - ./service_api/:/opt/service_api/service_api     # this path is correct!
    container_name: service-django
    hostname: service-django
    restart: always
  • Докер рабочего стола: 3.5.0
  • Docker Engine: 20.10.7
  • Compose: 1.29.2
  • Big Sur: 11.4

Любая помощь будет оценена по достоинству!

Вы можете либо внедрить свой код в контейнер во время сборки, используя COPY service_api /opt/service_api в вашем Dockerfile (что не то, что вы хотите здесь, так как это как бы записывает исходный код в образ), либо использовать другой подход (который желателен здесь), который заключается в привязке вашей директории исходного кода как тома в контейнере, что позволяет модификациям, которые вы вносите в ваш исходный код, быть видимыми внутри контейнера, что позволяет применять обновления кода при перезагрузке сервера Django (Как вы делаете то же самое в вашем compose файле)

Так что все, что вам нужно сделать здесь, это удалить копирование файлов во время сборки и позволить вашему исходному коду быть видимым только через этот том.

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