如何在Dockerfile构建阶段访问Cloud Run中定义的环境变量
核心原因
Cloud Run 「REVISIONS > SECRETS AND VARIABLES」中配置的参数仅作用于容器运行时阶段,不会被传递到镜像构建阶段,所以你在Dockerfile的构建步骤里无法直接读取这些值。你需要通过Cloud Build配置从Secret Manager中拉取敏感值,再传递给Docker构建的ARG参数。
步骤1:前置配置
- 把敏感凭证
APP_USR、APP_PASS存入Google Cloud Secret Manager,对应密钥ID可设为APP_USR、APP_PASS - 给Cloud Build默认服务账号(格式为
[你的项目编号]@cloudbuild.gserviceaccount.com)授予Secret Manager 秘密访问者角色,否则构建时无法拉取密钥值
步骤2:编写cloudbuild.yaml配置
直接替换以下示例中的占位符即可使用:
steps: # 第一步:构建镜像,从Secret Manager拉取密钥传递给Docker ARG - name: 'gcr.io/cloud-builders/docker' secretEnv: ['APP_USR', 'APP_PASS'] args: - build - --build-arg - APP_USR=$$APP_USR - --build-arg - APP_PASS=$$APP_PASS - -t - 'gcr.io/$PROJECT_ID/[你的镜像名称]:$COMMIT_SHA' - . # 第二步:将构建好的镜像推送到容器镜像仓库 - name: 'gcr.io/cloud-builders/docker' args: ['push', 'gcr.io/$PROJECT_ID/[你的镜像名称]:$COMMIT_SHA'] # 第三步:部署到Cloud Run - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk' entrypoint: gcloud args: - run - deploy - [你的Cloud Run服务名] - --image - 'gcr.io/$PROJECT_ID/[你的镜像名称]:$COMMIT_SHA' - --region - [你的服务部署区域,比如us-central1] - --platform - managed # 声明要从Secret Manager拉取的密钥 availableSecrets: secretManager: - versionName: projects/$PROJECT_ID/secrets/APP_USR/versions/latest env: 'APP_USR' - versionName: projects/$PROJECT_ID/secrets/APP_PASS/versions/latest env: 'APP_PASS' # 配置镜像保存规则 images: - 'gcr.io/$PROJECT_ID/[你的镜像名称]:$COMMIT_SHA'
步骤3:修正Dockerfile笔误
你现有Dockerfile里存在变量名拼写错误,会导致凭证读取失效,修正后如下:
ARG APP_USR ENV APP_USR ${APP_USR} ARG APP_PASS # 原写法多了一个下划线,改为${APP_PASS} ENV APP_PASS ${APP_PASS} RUN pip install https://${APP_USR}:${APP_PASS}@github.org/*****/master.zip
额外说明
如果是不需要加密的普通非敏感构建参数,不需要配置Secret Manager,直接在cloudbuild.yaml的docker build步骤的args里写死值,或者通过Cloud Build触发器的变量配置传入即可,不需要走secretEnv配置。
内容的提问来源于stack exchange,提问作者Finglish
相关产品推荐
相关产品推荐

