Развертывание приложения Flask в Google App Engine Flex с использованием Docker - PullRequest
0 голосов
/ 03 января 2019

Я хочу развернуть приложение Flask в Google App Engine Flex с помощью Docker.

Я установил образ Docker локально и смог запустить приложение Flask с помощью команд docker build -t myreponame ., а затем docker run -p 4000:80 myreponame. После этого я смог увидеть свое приложение по URL http://localhost:4000, и оно работало нормально.

Однако, когда я пытаюсь развернуть его в Google App Engine с помощью gcloud app deploy и перейти по URL http://YOUR_PROJECT_ID.appspot.com,, я получаю «502 Ошибка сервера».

Я подозреваю, что, возможно, конфигурация порта. Должен ли я по-другому определить следующее в своем коде Flask?

if __name__ == '__main__':
    HOST = '0.0.0.0'
    PORT = 80
    app.run(HOST, PORT, debug=True) 

Или я должен определить мой app.yaml файл по-другому?

runtime: custom
env: flex
entrypoint: gunicorn -b :$PORT app:app

My Dockerfile содержит следующее:

FROM python:2.7
WORKDIR /app
COPY . /app
RUN pip install --trusted-host pypi.python.org -r requirements.txt
EXPOSE 80
CMD ["python", "app.py"]

Любая помощь будет приветствоваться. Большое спасибо

Ответы [ 2 ]

0 голосов
/ 04 января 2019

Проблема действительно была в конфигурации порта.Внешний интерфейс App Engine маршрутизирует входящие запросы через порт 8080 (ссылка: https://cloud.google.com/appengine/docs/flexible/custom-runtimes/build?authuser=0),, поэтому я изменил свой код Flask на:

if __name__ == '__main__':
    HOST = '0.0.0.0'
    PORT = 8080
    app.run(HOST, PORT, debug=True) 

Я удалил конфигурацию точки входа из app.yaml:

runtime: custom
env: flex

и изменил Dockerfile на:

FROM python:2.7
WORKDIR /app
COPY . /app
RUN pip install --trusted-host pypi.python.org -r requirements.txt
EXPOSE 8080
CMD ["gunicorn", "app:app", "-b", ":8080", "--timeout", "300"]
0 голосов
/ 03 января 2019

Почему вы не используете Docker, запускаемый с '-p 80:80' вместо '-p 4000: 80'?

Или у вас также есть Nginx или sth для переадресации портов?

...