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