使用 Docker 在 Google App Engine Flex 上部署 Flask 应用程序

Flask app deployment on Google App Engine Flex using Docker

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

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

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

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

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