云 运行 部署失败:容器无法启动。无法启动,然后监听 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"]
我有一个项目,我之前已成功部署到 Google 云 运行,并设置了一个触发器,以便在推送到 Github 上的回购主分支时,它会自动部署。效果很好。
然后我尝试重命名 github 存储库,这意味着删除并创建一个新的触发器,现在我无法让它再次工作。
每次,构建成功但部署失败并在 Cloud Build 中出现此错误:
步骤 #2 - “部署”:错误:(gcloud.run.services.update) 云 运行 错误:容器无法启动。无法启动然后侦听 PORT 环境变量定义的端口。此修订的日志可能包含更多信息。
除了 repo 名称之外,我没有更改任何其他内容,这让我相信我的代码没有修复,但我还是尝试了一些更改。
我已经研究了
我的应用程序使用 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=
参数
CMD ["flask", "run", "--host", "0.0.0.0","--port","8080"]
另外,你的 flask 运行 命令,是一个 flask 运行time 并且完全忽略标准 python 入口点 if __name__ == "__main__":
。如果要使用此入口点,请使用 Python 运行time
CMD ["python", "<main file>.py"]