Как перевести flask run в Dockerfile? - PullRequest
0 голосов
/ 06 апреля 2020

Итак, я пытаюсь научиться контейнировать 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"]

Ответы [ 3 ]

0 голосов
/ 06 апреля 2020

Ой, прости. Хост в операторе ENTRYPOINT должен быть 0.0.0.0:

ENTRYPOINT ["flask", "run", "--host=0.0.0.0"]

И не забывайте порт t ie 5000 снаружи через -p параметр:

docker run -p 5000:5000 <your container>
0 голосов
/ 07 апреля 2020

Я полагаю, что эта задача будет лучше выполнена с помощью CMD, а не ENTRYPOINT.

(вы также должны определить рабочий каталог перед запуском команды COPY.)

например, ваш Dockerfile должен выглядеть примерно так:

FROM python:stretch

WORKDIR /app  
COPY . .

RUN pip3 install --upgrade pip
RUN pip3 install -r requirements.txt

CMD python3 main.py
0 голосов
/ 06 апреля 2020

Попробуйте определить FLASK_APP env по абсолютному пути. Или поместите эту строку в ваш Dockerfile:

WORKDIR /path/to/dir/that/contains/main.py/file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...