python - 尝试在 App Engine 上运行 Docker Flask 应用程序时出现错误 502
问题描述
我想在包含基本 Flask 应用程序的 App Engine 上部署 Docker 映像。此外,这个应用程序将成为我前端的 web-socket 端点。
部署是成功的。但我收到错误 502。
我已经阅读了文档,我尝试了很多配置,但我没有得到它的工作,如果有人有任何想法,我将不胜感激。
我的项目结构:
- socket/
- socket/
- main.py
- Dockerfile
- app.yaml
- requirements.txt
- cloudbuild.yaml
主文件
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def hello():
"""Return a friendly HTTP greeting."""
return 'Hello World!'
if __name__ == '__main__':
# This will be only used locally. App Engine will use gunicorn.
app.run(host='127.0.0.1', port=8080, debug=True)
要求.txt
Flask==1.0.3
Flask-Sockets==0.2.1
gunicorn==19.9.0
Dockerfile
FROM python:2.7
WORKDIR /app
COPY . /app
EXPOSE 8080
RUN pip install --trusted-host pypi.python.org -r requirements.txt
ENTRYPOINT ["gunicorn","--bind=0.0.0.0:8080", "-k flask_sockets.worker", "main:app"]
应用程序.yaml
runtime: custom
env: flex
service: socket
entrypoint: gunicorn -b :$PORT -k flask_sockets.worker main:app
manual_scaling:
instances: 1
network:
session_affinity: true
cloudbuild.yaml
steps:
# Decrypt env secrets
- name: gcr.io/cloud-builders/gcloud
args:
- kms
- decrypt
- --ciphertext-file=./socket/conf/gcp_credentials.json.enc
- --plaintext-file=./socket/conf/gcp_credentials.json
- --location=global
- --keyring=cloudbuild-env
- --key=cloudbuild-env
id: decrypt
# Build the docker image
- name: gcr.io/cloud-builders/docker
args: [ 'build', '-t', 'gcr.io/$PROJECT_ID/tweets-socket-dataflow', './socket/' ]
id: build
# Deploy the image
- name: gcr.io/cloud-builders/gcloud
args: ['app', 'deploy', './socket/app.yaml', '-v', '1-socket-latest']
id: deploy
timeout: 600s
这实际上在本地工作。
使用的 Docker 命令
docker run -it -d -p 8080:8080 144005a4e426
码头工人ps
c2763d0b8b75 144005a4e426 "gunicorn --bind=0.0…" 3 seconds ago Up 1 second 0.0.0.0:8080->8080/tcp sleepy_ganguly
http:127.0.0.1:8080
解决方案
推荐阅读
- vb.net - vb.net 中的任务栏
- hive - 数据摄取问题 hive:java.lang.OutOfMemoryError:无法创建新的本机线程
- azure-storage - ACS AEM Commons - acs-aem-commons-bundle 找不到类
- android - Android - 除了值之外,如何从 JSON 中获取键名
- java - Android Studio 中的白色 AdView
- json - 从 SQL Server 2016 中的 json 数据返回值
- qlikview - Qlikview -- 在表达式中使用带有变量的 If
- javascript - 计算立方体之间的距离(当存在环绕时)
- javafx - 打印对话框后 JavaFX 应用程序变得不可用
- kubernetes - 让我们用 Helm 在 Traefik 上加密