【问题标题】:Flask app deployment on Google App Engine Flex using Docker使用 Docker 在 Google App Engine Flex 上部署 Flask 应用程序
【发布时间】:2019-05-30 09:21:10
【问题描述】:

我想使用 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"]

非常欢迎任何帮助。非常感谢

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      或者你也有Nginx之类的做端口转发?

      【讨论】:

      • 我实际上是按照Docker教程docs.docker.com/get-started/part2/#build-the-app中的说明进行的,我不使用Nginx或任何工具进行端口转发。
      • 我实际上认为gcloud app deploy 会为我处理端口转发。我应该在该命令中添加任何选项吗?
      猜你喜欢
      • 2019-04-22
      • 2014-01-20
      • 2020-03-04
      • 1970-01-01
      • 2019-05-18
      • 1970-01-01
      • 2023-03-06
      • 2019-08-11
      • 1970-01-01
      相关资源
      最近更新 更多