@ErikHabr

Как заставить docker обновлять код django?

Подскажите как сделать так, чтобы когда я внес изменения в коде, докер автоматически обновлял контейнер и эти изменения применились? Получается очень не удобно работать сейчас. У меня mac os (если это важно).

Пример Docker
FROM python:3.8

ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

RUN mkdir /efood_backend

WORKDIR /efood_backend

COPY requirements.txt /efood_backend/

RUN pip install --upgrade pip && pip install -r requirements.txt

ADD . /efood_backend/


Пример docker-compose.yaml
version: '3'

services:
  backend:
    build: .
    container_name: efood_backend
    #hostname: efood_backend
    restart: always
    command: python manage.py runserver 0.0.0.0:8000  # python backend/manage.py ?
    volumes:
      - .:/efood-backend
    ports:
      - "0.0.0.0:8000:8000"  # 8000:8000 ?
    env_file:
      - .env
    depends_on:
      - pgdb
      - celery
      - redis

  celery:
    build: .
    container_name: efood_celery
    command: celery -A project worker -l INFO
    volumes:
      - .:/efood-backend
    env_file:
      - .env
    depends_on:
      - redis
      - pgdb

  celery_beat:
    build: .
    container_name: efood_celery_beat
    command: celery -A project beat -l info
    env_file:
      - .env
    depends_on:
      - redis
      - pgdb
      - celery
    volumes:
      - .:/efood-backend

  pgdb:
    image: postgres
    container_name: efood_pgdb
    env_file:
      - .env
    volumes:
      - efood-pgdata:/var/lib/postgresql/data/

  pgadmin:
    container_name: efood_pgadmin
    image: dpage/pgadmin4
    depends_on:
      - pgdb
    restart: unless-stopped
    env_file:
      - .env
    ports:
      - 8080:80
    volumes:
      - efood-pgadmin-data:/var/lib/pgadmin
    links:
      - "pgdb:pgsql-server"

  redis:
    image: "redis:alpine"
    container_name: efood_redis

volumes:
  efood-pgdata:
  efood-pgadmin-data:
  • Вопрос задан
  • 396 просмотров
Пригласить эксперта
Ответы на вопрос 2
karabanov
@karabanov Куратор тега Docker
Системный администратор
Предварительно вызывать RUN mkdir /efood_backend нет необходимости - WORKDIR /efood_backend сам создаст директорию.

Можешь попробовать запускать приложение не напрямую python manage.py runserver 0.0.0.0:8000, а с помощью gunicorn - у него есть способность авторелоада в случае изменения файла, надо указать за каким именно файлом надо следить как-то так:
--preload --reload --reload-extra-file /path/to/file/reload.txt
Ответ написан
@ErikHabr Автор вопроса
Странно, после часов мучений и поисков, я решил название папки efood-backend сократить до просто efood и все работает как нужно. Контейнеры автоматом сами обновляются.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы