使用Docker在Google App Engine Flex上进行烧瓶应用部署

时间:2019-01-03 18:51:55

标签: python docker google-app-engine flask gunicorn

我想使用Docker在Google App Engine Flex上部署Flask应用。

我在本地设置了Docker映像并使用命令设法运行了Flask应用 docker build -t myreponame .,然后docker run -p 4000:80 myreponame。 然后,我可以在URL http://localhost:4000上看到我的应用程序,并且运行正常。

但是,当我尝试使用gcloud app deploy将其部署在Google App Engine上并转到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

我的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 :(得分:2)

问题确实出在端口配置中。 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"]

答案 1 :(得分:0)

为什么不使用docker run'-p 80:80'而不是'-p 4000:80'?

或者您还有Nginx或其他东西来进行端口转发?