Перезапустите приложение фляги в докере при изменениях

Я использую FlashK-скрипт для запуска моего приложения:

if __name__ == "__main__":
    manager.run()

В докере у меня есть следующее:

CMD [ "python", "manage.py", "runserver", "-h", "0.0.0.0", "-p", "5000"]

Теперь, когда я собираю и запускаю свой контейнер, приложение работает нормально. Однако, если я внесу изменения в свой код и сохраню приложение, оно не перезапустится, несмотря на то, что в моей среде env задана переменная DEBUG=True. Я что-то здесь упускаю?

Dockerfile:

FROM python:3.4-slim

RUN apt-get update -y && \
    apt-get install -y \
        python-pip \
        python-dev \
        pkg-config \
        libpq-dev \
        libfreetype6-dev

COPY ./requirements.txt /app/requirements.txt

WORKDIR /app

RUN pip3 install -r requirements.txt

COPY . /app

CMD [ "python", "manage.py", "runserver"]

1 ответ

Решение

COPY инструкция

копирует новые файлы или каталоги из и добавляет их в файловую систему контейнера по пути .

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


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

Эта команда монтирует каталог хоста / src / webapp в контейнер в / webapp. Если путь / webapp уже существует внутри образа контейнера, монтирование / src / webapp накладывается, но не удаляет ранее существовавший контент. Как только монтирование удалено, контент снова становится доступным.

Команда запуска Docker, вероятно, будет выглядеть примерно так

docker run -d -v /absolute/path/to/src:/app <image-name>

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


Вы также можете быть заинтересованы в этом посте Dockerize a Flask, Celery и Redis Application с помощью Docker Compose. Это делает еще один шаг вперед и использует Docker Compose для организации среды разработки Flask.

Другие вопросы по тегам