GCP Cloud Run容器未监听8080端口问题排查求助
Cloud Run部署失败排查:容器未监听8080端口(本地运行正常)
我通过Cloud Build部署Cloud Run服务时失败,提示容器未监听8080端口,但本地运行该容器时可以正常访问8080端口,请求协助排查问题。
错误日志相关
日志过滤规则:
resource.type = "cloud_run_revision" resource.labels.service_name = "icognition-api-scv" resource.labels.location = "us-central1" severity>=DEFAULT
Cloud Build配置(cloudbuild.yaml)
steps: - id: "Build Docker Image" name: 'gcr.io/cloud-builders/docker:latest' dir: '.' args: ['build', '-t', 'us-central1-docker.pkg.dev/${PROJECT_ID}/icognition-api-artifact-registry/icognition-api-img', '.'] - id: "Push Docker Image To Artifact Registry" name: 'gcr.io/cloud-builders/docker:latest' args: ['push', '--all-tags', 'us-central1-docker.pkg.dev/${PROJECT_ID}/icognition-api-artifact-registry/icognition-api-img'] - id: "Deploy Cloud Run Service" name: 'gcr.io/cloud-builders/gcloud:latest' args: [ 'run', 'deploy', 'icognition-api-scv', '--service-account' ,'sa-icognition-api-svc@${PROJECT_ID}.iam.gserviceaccount.com', '--allow-unauthenticated', '--memory', '512Mi', '--platform', 'managed', '--image', 'us-central1-docker.pkg.dev/${PROJECT_ID}/icognition-api-artifact-registry/icognition-api-img', '--port', '8080', '--timeout', '30', '--min-instances', '0', '--max-instances', '1', '--ingress', 'all', '--region', 'us-central1', '--set-secrets', 'DATABASE_URL=icog-db-stg-secret:latest', '--network' ,'default', '--subnet', 'default', '--vpc-egress', 'private-ranges-only' ] timeout: 600s options: logging: CLOUD_LOGGING_ONLY dynamic_substitutions: true
Dockerfile内容
# FROM python:3.12-slim WORKDIR /app # 安装依赖库 COPY requirements.txt ./ RUN pip install --upgrade pip RUN pip install --no-cache-dir -r requirements.txt # 将应用复制到容器中 COPY ./app ./app ENV HOST 0.0.0.0 EXPOSE 8080 # 启动应用 CMD uvicorn app.main:app --host 0.0.0.0 --port 8080
排查方向建议
- 验证镜像一致性:拉取Artifact Registry中的镜像到本地运行,确认是否和本地测试的版本一致,是否能正常监听8080端口。
- 排查VPC配置影响:部署时使用了
--vpc-egress private-ranges-only,可能导致容器启动时无法访问外部依赖(如数据库、第三方服务),进而导致服务启动失败。可临时改为all-traffic测试是否能正常启动。 - 查看容器启动日志:在Cloud Run控制台查看容器启动的详细日志,确认是否有应用启动报错(如依赖缺失、数据库连接失败等),这类问题会导致服务未正常监听端口。
- 兼容Cloud Run环境变量:将启动命令中的端口改为环境变量形式
--port ${PORT:-8080},确保和Cloud Run默认的PORT环境变量兼容。 - 检查服务账号权限:确认部署用的服务账号是否有权限访问Secret Manager中的
icog-db-stg-secret,如果无法获取数据库URL,会导致应用启动失败。
内容的提问来源于stack exchange,提问作者eboraks
相关产品推荐
相关产品推荐

