Docker Compose Проблема «горячей перезагрузки» - PullRequest
0 голосов
/ 17 декабря 2018

Пока я видел другие вопросы - ни одно из предложенных решений или документации не помогло мне до сих пор.Извиняюсь, если это несколько избыточно.

Я пытаюсь смонтировать том в моем файле docker-compose.yml, чтобы «перезагрузить» мой код при внесении изменений.Я запускаю приложение фляги.Моя файловая структура выглядит следующим образом:

├── celery_queue
│   ├── Dockerfile
│   ├── requirements.txt
│   └── tasks.py
├── docker-compose.yml
├── my_test_app
│   ├── Dockerfile
│   ├── app
│   │   ├── __init__.py
│   ├── my_test_app.py
│   ├── requirements.txt
│   └── worker.py
├── run.sh
└── stop.sh

My docker-compose.yml:

version: "3"
services:
  redis:
    image: "redis:alpine"
  web:
    build:
      context: ./my_test_app
      dockerfile: Dockerfile
    restart: always
    volumes:
      - ./my_test_app:/my_test_app
    ports:
     - "5000:5000"
    depends_on:
      - redis
  worker:
    build:
      context: celery_queue
      dockerfile: Dockerfile
    depends_on:
      - redis
  monitor:
    build:
      context: celery_queue
      dockerfile: Dockerfile
    ports:
     - "5555:5555"
    entrypoint: flower
    command:  -A tasks --port=5555 --broker=redis://redis:6379/0
    depends_on:
      - redis

И, наконец, Dockerfile в my_test_app dir:

FROM python:3.6-alpine

ENV CELERY_BROKER_URL redis://redis:6379/0
ENV CELERY_RESULT_BACKEND redis://redis:6379/0
ENV C_FORCE_ROOT true

ENV HOST 0.0.0.0
ENV PORT 5000
ENV DEBUG true

ADD . /my_test_app
WORKDIR /my_test_app

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

# expose the app port
EXPOSE 5000

RUN pip install gunicorn

# run the app server
CMD ["gunicorn", "--bind", "0.0.0.0:5000", "--workers", "3", "my_test_app:app"]

Опять же - моя цель - отредактировать код Flask в каталоге my_test_app и перезагрузить его в моем контейнере без запуска / остановки.

Заранее благодарим за любые предложения!

1 Ответ

0 голосов
/ 17 декабря 2018

На самом деле это было связано с моей командой Gunicorn, для которой требуется флаг --reload.

Шаги, которые я использовал для решения проблемы:

1) Поскольку я использую OSX, я подтвердил в настройках Docker, что для этого каталога был включен общий доступ к файлам.

2) Я exec'd в контейнер, чтобы проверить, обновлялись ли файлы после ошибок кода: docker exec -it my-container-name sh

3) Они обновлялись, как и ожидалось, поэтому я проверил документацию по gunicorn / flask.

...