【发布时间】:2021-11-10 01:49:03
【问题描述】:
我有一个项目,我之前已成功部署到 Google Cloud Run,并设置了一个触发器,以便在推送到 Github 上 repo 的主分支时,它会自动部署。效果很好。
然后我尝试重命名 github repo,这意味着删除并创建一个新触发器,现在我无法让它再次工作。
每次构建成功,但部署失败,并在 Cloud Build 中出现此错误:
第 2 步 - “部署”:错误:(gcloud.run.services.update) Cloud Run 错误:容器无法启动。无法启动并侦听 PORT 环境变量定义的端口。此修订的日志可能包含更多信息。
除了 repo 名称之外,我没有更改任何其他内容,这让我相信我的代码无法解决这个问题,但我还是尝试了一些更改。
我已经研究了this 帖子中提出的解决方案。但是,我相信我正在侦听正确的端口。
我的应用正在使用 Python 和 Flask,并且包含以下内容:
if __name__ == "__main__":
app.run(debug=False, host="0.0.0.0", port=int(os.environ.get("PORT", 8080)))
应该使用 ENV var Port (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 Run 似乎确实在使用端口 8080 - 如果我深入研究响应,我会看到它嵌套在 Response.spec.container.0 下:
ports: [
0: {
containerPort: 8080
name: "http1"
}
]
话虽如此,如果我查看日志,它会显示“现在在端口 5000 上运行”。
我不知道端口 5000 来自何处或被设置,但尝试将 Python/Flask 和 Dockerfile 中的端口更改为 5000 会导致相同的错误。
如何让它在 8080 端口上运行?在重命名回购和创建新触发器之前,这对我来说非常奇怪。这个设置有何不同?触发器没有提供设置端口的选项,所以我不确定这是如何导致此错误的。
【问题讨论】:
-
显示部署 Cloud Run 服务的命令或构建步骤。您可以通过 gcloud 命令行选项 --port=8080 指定端口号。
-
当我推送到 githhub 时它会自动启动,所以我没有那样指定它。我基于此确认它位于端口 8080:cloud.google.com/run/docs/configuring/containers#console 但是,当您进行 github 集成以进行部署时,可能未使用该设置
-
如果您在控制台 GUI 中配置了部署操作,那么您还配置了端口号。您的文档链接显示了该步骤。 cloud.google.com/run/docs/configuring/containers#console
标签: port google-cloud-run google-cloud-build