Как исправить проблему с горячей перезагрузкой в ​​приложении Flask внутри Docker? - PullRequest
0 голосов
/ 27 мая 2019

Я хочу, чтобы мое приложение фляги запускалось с горячей перезагрузкой в ​​док-контейнере, но если я изменил свое приложение app.py в фляге на app.run(debug=True,host='0.0.0.0') вместо False, это вызовет ошибку:

FileNotFoundError: [Errno 2] Нет такого файла или каталога: '/app/app.py': '/app/app.py'


Если я вернусь к False:

app.run(debug=False,host='0.0.0.0')

будет работать, но без горячей перезагрузки.

Мой файл Docker:

    FROM ubuntu:latest
    RUN apt-get update -y
    RUN apt-get install -y python3-pip python3-dev build-essential locales
    RUN locale-gen en_US.UTF-8  
    ENV LANG en_US.UTF-8  
    ENV LANGUAGE pt_BR:pt:en  
    ENV LC_ALL en_US.UTF-8
    ENV FLASK_ENV="development"
    WORKDIR /app 
    COPY . /app
    VOLUME ["/app"]
    RUN pip3 install -r requirements.txt
    ENTRYPOINT ["python3"]
    CMD ["app.py"]

и я запускаю его с помощью команды:
docker run -p 5000:5000 -v /Users/rodrigodmpa/Documents/IA/web:/app flask-app

1 Ответ

0 голосов
/ 28 мая 2019

Я вижу несколько вещей не так с Dockerfile. Я думаю, что вашей непосредственной проблемой является линия VOLUME ["/app"]. Вы статически скопировали код в ваше изображение и объявили, что контейнеры, на которых выполняется это изображение, экспортируют том в папку /app, а затем запускают контейнер с томом для привязки в том же месте. Вероятно, есть некоторые проблемы с разрешениями, в результате которых контейнер перестает видеть содержимое /app. Вам не нужно объявление VOLUME, поэтому откажитесь от него.

Также: всегда ставьте apt-get update и apt-get install в одном и том же объявлении RUN. Если вы этого не сделаете, а затем отредактируете установленные пакеты, то по умолчанию Docker будет кэшировать слои из предыдущей команды. Это означает, что вы могли бы установить пакет на основе определений пакетов давно. Это должно выглядеть как RUN apt-get update -y && apt-get install -y python3-pip python3-dev build-essential locales

...