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

How to access cloud run environment variables in Dockerfile

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

编译的文件

然后我可以像这样在 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

我正在通过同步的 bitbucket 存储库部署到云 运行,并已在 "REVISIONS" > "SECRETS AND VARIABLES" 下定义,(如此处所述: https://cloud.google.com/run/docs/configuring/environment-variables) 但我不知道如何在构建期间访问 Dockerfile 中的这些变量。

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

你有几种方法可以实现。

您确实可以创建包含 .env 的容器。但这不是一个好的做法,因为您的 .env 可以包含秘密(API 密钥、数据库密码...)并且因为您的容器对环境很严格

另一种解决方案是在云 运行 上部署您的容器(不是 docker 组合,它在云 运行 上不起作用),并且 add the environment variable with the revision .例如,使用 --set-env-vars=KEY1=Value1 格式来实现。

如果您有秘密,可以将它们存储在secret manager and load it as env var at runtime, or as volume

最后一个解决方案,如果你可以指定你的容器将在你的文件树中获取 .env 文件的位置(我不是专家 Python 无法帮助你),你可以使用这个技巧I described in this article。它专为配置文件而设计,它本地存储在 Secret Manager 中,因此可以自动保护您的秘密。

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

但我能够在 Docker 文件中使用 Secret Manager 的 secrets

来源:

快速总结:

在你的例子中,对于 APP_USRAPP_PASS

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

  2. cloudbuild.yaml文件末尾添加一个availableSecrets块(在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'
  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
  1. 在您的 Dockerfile:
  2. 中将这些秘密用作标准环境变量
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