You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker容器部署至GCP CloudRun失败的排查求助

问题:Cloud Run部署失败,容器无法监听指定端口

错误:等待创建Service失败:资源处于失败状态"Ready:False",消息:修订版'containerized-model-ml-00001-98t'未就绪,无法处理流量。用户提供的容器无法启动并监听PORT=8001环境变量定义的端口。该修订版的日志可能包含更多信息。

项目结构

├── .github
│   ├── workflows
│       └── ci_cd.yml
│
├── src
|   ├── backend.R
│   └── model.rds
│
├── terraform
│   ├── Dockerfile
│   ├── main.tf
│   ├── terraform.tfvars
│   └── variables.tf
│
└── README.md

排查与修复方案

1. Docker镜像文件路径错误(核心问题)

当前Dockerfile未将本地src目录的文件复制到容器内,且启动命令路径无效,直接导致R脚本启动失败:

  • 缺失COPY指令,容器内不存在backend.R和model.rds文件
  • 启动命令./../src/backend.R的路径在容器内无对应目录

修正后的Dockerfile:

# Install R-version 3.6.3 as image
FROM rocker/r-ver:3.6.3

# Install required ubuntu libraries for 'mlr'
RUN apt-get update -qq && apt-get install -y \
  libgdal-dev libgeos-dev libproj-dev r-cran-udunits2 libgsl-dev libgmp-dev libglu-dev  r-cran-rjags libmpfr-dev libopenmpi-dev

# Install required libraries
RUN R -e "install.packages('beakr')"
RUN R -e "install.packages('mlr')"
RUN R -e "install.packages('randomForest')"
RUN R -e "install.packages('caret')"

# 创建工作目录
WORKDIR /app

# 复制本地src目录文件到容器工作目录
COPY ../src/ .

# 暴露端口
EXPOSE 8001

# 启动脚本
CMD ["Rscript", "./backend.R"]

2. Cloud Run端口配置匹配

Cloud Run默认检查容器是否监听PORT环境变量指定的端口,需确保配置一致:

  • 在Terraform的Cloud Run配置中显式设置PORT环境变量
  • 修改R脚本读取环境变量端口,避免硬编码

修正Terraform的Cloud Run容器配置:

containers {
  image = "${local.artifact_storage_address}:latest"
  ports {
    container_port = 8001
  }
  # 添加PORT环境变量
  env {
    name  = "PORT"
    value = "8001"
  }
}

修正backend.R的端口读取逻辑:

# 从环境变量获取端口,默认8001
port <- as.integer(Sys.getenv("PORT", "8001"))

newBeakr() %&gt;% 
  httpGET(path = "/predict", decorate(get_prediction)) %&gt;%
  handleErrors() %&gt;%
  listen(host = "0.0.0.0", port = port)

3. 本地验证容器可用性

先在本地构建运行容器,确认服务正常:

# 从项目根目录构建镜像
docker build -t test-image -f terraform/Dockerfile .
# 运行容器并映射端口
docker run -p 8001:8001 test-image
# 测试API
curl http://localhost:8001/predict?arg_1=5.1&arg_2=3.5&arg_3=1.4&arg_4=0.2

若本地运行失败,查看容器日志定位具体错误:

docker logs <容器ID>

4. 修正Terraform构建镜像的上下文

当前null_resource的构建工作目录为terraform,无法访问上级src目录,需切换到项目根目录执行构建:

provisioner "local-exec" {
    working_dir = path.root
    command     = "docker build -t ${local.artifact_storage_address} -f terraform/Dockerfile . && docker push ${local.artifact_storage_address}"
}

5. 查看Cloud Run容器日志

在GCP控制台的Cloud Run服务页面,找到失败的修订版,查看容器日志,可直接获取启动时的错误详情(如依赖缺失、文件找不到等)。


内容的提问来源于stack exchange,提问作者Keith Cozart

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 02:35:06