Перезапустите приложение фляги в докере при изменениях
Я использую 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.