如何在Dockerfile中访问云运行环境变量

Fin*_*ish 5 environment-variables docker google-cloud-platform google-cloud-run

我已经构建了一个容器化的 python 应用程序,该应用程序使用.env文件和使用 compose build 编译的docker-compose.yml文件在本地运行没有问题

然后我就可以像这样在 Dockerfile 中使用变量。

ARG APP_USR
ENV APP_USR ${APP_USR}

ARG APP_PASS
ENV APP_PASS ${APP__PASS}

RUN pip install https://${APP_USR}:${APP_PASS}@github.org/*****/master.zip
Run Code Online (Sandbox Code Playgroud)

我正在通过同步的 bitbucket 存储库部署到云运行,并在“修订”>“秘密和变量”下定义,(如下所述: https: //cloud.google.com/run/docs/configuring/environment-variables)但我无法弄清楚如何在构建过程中访问 Dockerfile 中的这些变量。

据我了解,我需要创建一个 cloudbuild.yaml 文件来定义变量,但我无法找到如何使用 cloud run 中定义的环境变量进行设置的清晰示例。

See*_*ven 2

我的理解是,不可能在 Dockerfile 中直接使用 Cloud Run 修订版的环境变量,因为构建是由 Cloud Build 管理的,它在部署之前不知道 Cloud Run 修订版。

但我能够在 Dockerfile 中使用 Secret Manager 的机密。

资料来源:

快速总结:

在你的情况下,对于APP_USRAPP_PASS

  1. 将密钥的 Secret Manager Secret Accessor (roles/secretmanager.secretAccessor) IAM 角色授予 Cloud Build 服务帐户(请参阅第一个来源)。

  2. availableSecrets在文件末尾添加一个块cloudbuild.yaml(块外steps):

availableSecrets:
  secretManager:
  - versionName: <APP_USR_SECRET_RESOURCE_ID_WITH_VERSION>
    env: 'APP_USR'
  - versionName: <APP_PASS_SECRET_RESOURCE_ID_WITH_VERSION>
    env: 'APP_PASS'
Run Code Online (Sandbox Code Playgroud)
  1. 将秘密传递给您的构建步骤(取决于您如何调用docker build,Google 的文档使用“bash”,我直接使用 Docker):
  - id: Build
    name: gcr.io/cloud-builders/docker
    args:
      - build
      - '-f=Dockerfile'
      - '.'

      # Add these two `--build-arg` params:

      - '--build-arg'
      - 'APP_USR=$$APP_USR'

      - '--build-arg'
      - 'APP_PASS=$$APP_PASS'

    secretEnv: ['APP_USR', 'APP_PASS'] # <=== add this line
Run Code Online (Sandbox Code Playgroud)
  1. 使用这些秘密作为您的标准环境变量Dockerfile
ARG APP_USR
ENV APP_USR $APP_USR

ARG APP_PASS
ENV APP_PASS $APP_PASS

RUN pip install https://$APP_USR:$APP_PASS@github.org/*****/master.zip
Run Code Online (Sandbox Code Playgroud)