Итак, я пытаюсь научиться контейнировать flask приложения, и до сих пор я понял два способа локального запуска приложения flask:
Один из них - иметь этот код в основной файл:
if __name__ == '__main__':
APP.run(host='0.0.0.0', port=8080, debug=False)
и запускается с
python3 main.py
Другой - удалить приведенный выше код из main.py
, просто определить переменную среды и выполнить flask run:
export FLASK_APP=main.py
flask run
Я попытался преобразовать оба этих метода в Dockerfile:
ENTRYPOINT["python3", "main.py"]
, который хорошо работает для первого. Однако, когда я пытаюсь сделать что-то вроде:
ENV FLASK_APP "./app/main.py"
ENTRYPOINT ["flask", "run"]
, я не могу связаться с сервером через браузер. Контейнер запускается все хорошо, просто он недоступен. Одна хитрость, которая работает, если я добавляю адрес хоста в точку входа следующим образом:
ENTRYPOINT ["flask", "run", "--host=0.0.0.0"]
Я не уверен, почему я должен --host
к точке входа, когда локально я могу сделать также без этого. Еще одна забавная вещь, которую я заметил, заключалась в том, что если я поставлю хост как --host=127.0.0.1
, он все равно не будет работать.
Может кто-нибудь объяснить, что на самом деле здесь происходит? Либо я не правильно понимаю ENTRYPOINT
, либо, может быть, flask .. или, может быть, оба.
EDIT : Весь файл Docker для справки:
FROM python:stretch
COPY . /app
WORKDIR /app
RUN pip3 install --upgrade pip
RUN pip3 install -r requirements.txt
ENV FLASK_APP "/app/main.py"
ENTRYPOINT ["flask", "run", "--host=127.0.0.1"]