
Help Needed: Cloud Run Deployment Failing to Listen on PORT 8080 Google Cloud Run
快速结论:该报错通常在部署 Ollama 容器到 Cloud Run 时发生,容器本地运行正常但云端启动失败。优先排查:1) 构建镜像时是否指定了 --platform linux/amd64(尤其是 Mac 构建场景);2) 确认容器内的 Ollama 进程是否真正绑定并监听了 PORT=8080。
问题场景
用户按照 Google Cloud 官方 GPU Gemma2 with Ollama 教程,在本地构建 Docker 镜像(基于 ollama/ollama:0.5.11)并通过 gcloud beta run deploy 部署到 Cloud Run。容器在本地运行正常,但在 Cloud Run 上启动失败,Revision 无法就绪并报错无法监听端口 8080。
报错原文
ERROR: (gcloud.beta.run.deploy) Revision 'ollama-llama-00004-r8l' is not ready and cannot serve traffic. The user-provided container failed to start and listen on the port defined provided by the PORT=8080 environment variable within the allocated timeout. This can happen when the container port is misconfigured or if the timeout is too short. The health check timeout can be extended. Logs for this revision might contain more information.
原因分析
可能原因一(社区确认的有效排查方向):构建镜像时未指定 --platform linux/amd64,特别是在 Apple Silicon(M 系列)Mac 上构建时,默认可能生成 ARM64 架构镜像,而 Cloud Run 运行环境为 AMD64,导致容器无法正确监听端口。该问题在 Issue 中被提及为个人遇到的典型失败场景。
可能原因二:运行在非 root 用户环境下,Ollama 默认监听 0.0.0.0:11434,但 Cloud Run 要求容器必须明确绑定并监听由环境变量 PORT(值为 8080)指定的端口。Dockerfile 中的 OLLAMA_HOST=0.0.0.0:${PORT} 在构建时即被硬编码为 0.0.0.0:8080,但 Ollama 在容器启动时的服务逻辑可能未正确读取该变量,或监听行为与 Cloud Run 健康检查机制冲突。
可能原因三:Dockerfile 中的 RUN 指令在构建阶段执行了 ollama serve,该命令会在构建时短暂启动服务并阻塞,可能导致镜像固化了一个不正确的运行状态,影响容器实际启动时的端口监听行为。
环境排查
- 确认构建镜像的主机架构:
uname -m(若为 arm64/aarch64,注意平台参数) - 确认构建命令是否包含
--platform linux/amd64 - 检查 Cloud Run 服务日志,搜索
Listening、bind、address already in use等关键词 - 确认 Dockerfile 中
PORT环境变量值为 8080,且OLLAMA_HOST=0.0.0.0:${PORT}在运行时被正确解析 - 确认 Cloud Run 部署命令中未设置冲突的
--port参数(默认已使用 PORT 环境变量)
解决步骤
- (可优先尝试)在构建镜像时显式指定平台:在
docker build命令后添加--platform linux/amd64,例如:docker build --platform linux/amd64 -t your-image-name . - 检查并调整 Dockerfile 中的端口监听逻辑:确保容器启动时 Ollama 服务确实在 8080 端口上监听。可以考虑移除 Dockerfile 中构建阶段的
RUN ollama serve ...,改用 CMD 或 ENTRYPOINT 启动,并显式设置监听地址:CMD ["ollama", "serve"],同时通过环境变量OLLAMA_HOST配置。 - 修改为显式端口绑定:在 Dockerfile 中硬编码监听端口:
ENV OLLAMA_HOST=0.0.0.0:8080,确保不依赖变量展开。或者使用EXPOSE 8080显式声明。 - 增加 Cloud Run 健康检查超时时间:在 deploy 命令中添加
--startup-cpu-boost或通过gcloud beta run deploy的--timeout参数(已设置为 600 秒,可暂时提升至 900 秒)给予模型加载更多时间。 - 检查 Cloud Run 日志:通过报错信息中的日志链接进入 Google Cloud Logs Explorer,过滤容器启动阶段的日志,寻找错误线索(如
panic、cannot listen)。
验证方法
重新构建镜像并部署后,观察 Cloud Run 控制台或 gcloud 部署输出的 Revision 状态。若等待后显示 Ready: Yes 且服务 URL 可正常访问(通过 curl 或浏览器测试),则问题解决。也可通过 Cloud Run 日志确认容器启动日志中出现类似 Listening on 0.0.0.0:8080 的信息。

![[Bug][KV Offload]: `on_request_finished()` has inconsistent guarantees across offloading layers](https://www.chat-gpts.plus/wp-content/uploads/2026/06/46027-c3300fcd-768x403.jpg)

