云 运行 部署失败:容器无法启动。无法启动,然后监听 PORT 环境变量定义的端口

Cloud Run Deploy fails: Container failed to start. Failed to start and then listen on the port defined by the PORT environment variable

我有一个项目,我之前已成功部署到 Google 云 运行,并设置了一个触发器,以便在推送到 Github 上的回购主分支时,它会自动部署。效果很好。

然后我尝试重命名 github 存储库,这意味着删除并创建一个新的触发器,现在我无法让它再次工作。

每次,构建成功但部署失败并在 Cloud Build 中出现此错误:

步骤 #2 - “部署”:错误:(gcloud.run.services.update) 云 运行 错误:容器无法启动。无法启动然后侦听 PORT 环境变量定义的端口。此修订的日志可能包含更多信息。

除了 repo 名称之外,我没有更改任何其他内容,这让我相信我的代码没有修复,但我还是尝试了一些更改。

我已经研究了 post 中提出的解决方案。但是,我相信我正在监听正确的端口。

我的应用程序使用 Python 和 Flask,并且包含:

if __name__ == "__main__":
    app.run(debug=False, host="0.0.0.0", port=int(os.environ.get("PORT", 8080)))

哪个应该使用 ENV var 端口 (8080),否则默认为 8080。我也试过只使用 port=8080。

我尝试在 Dockerfile 中显式公开端口,但也没有用:

FROM python:3.7
   
#Copy files into docker image dir, and make that the current working dir
COPY . /docker-image
WORKDIR /docker-image

RUN pip install -r requirements.txt

CMD ["flask", "run", "--host", "0.0.0.0"]

EXPOSE 8080

Cloud 运行 似乎正在使用端口 8080 - 如果我深入研究响应,我会看到它嵌套在 Response.spec.container.0 下:

ports: [
  0: {
    containerPort: 8080
    name: "http1"
  }
]

综上所述,如果我查看日志,它会显示“现在 运行正在端口 5000 上运行”。

我不知道端口 5000 来自或设置的位置,但尝试将 Python/Flask 和 Dockerfile 中的端口更改为 5000 会导致相同的错误。

如何将其发送到端口 8080 上的 运行?在重命名回购协议和创建新触发器之前,它运行良好,这对我来说非常奇怪。这个设置有何不同?触发器没有提供设置端口的选项,所以我不确定这是如何导致此错误的。

你有混合的东西。 Flask 命令默认端口实际上是 5000。如果你想改变它,你需要用 --port= 参数

改变你的 flask 运行 命令
CMD ["flask", "run", "--host", "0.0.0.0","--port","8080"]

另外,你的 flask 运行 命令,是一个 flask 运行time 并且完全忽略标准 python 入口点 if __name__ == "__main__":。如果要使用此入口点,请使用 Python 运行time

CMD ["python", "<main file>.py"]