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 файле)
Так что все, что вам нужно сделать здесь, это удалить копирование файлов во время сборки и позволить вашему исходному коду быть видимым только через этот том.