我想使用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"]
任何帮助都是非常欢迎的。非常感谢
答案 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或其他东西来进行端口转发?