【问题标题】:Pass Variable From Github Action to Docker image build将变量从 Github Action 传递到 Docker 镜像构建
【发布时间】:2021-04-25 03:17:48
【问题描述】:

我一直致力于设置一个 Github Actions 工作流来构建一个 docker 镜像。我需要将环境变量传递到图像中,以便我的 Django 项目能够正确运行。不幸的是,当我构建图像时,它没有收到变量的值。

我的工作流文件的相关部分:

     - name: Build, tag, and push image to AWS ECR
    id: build-image
    env:
      ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
      IMAGE_TAG: ${{ github.sha }}
      aws_ses_access_key_id: ${{ secrets.AWS_SES_ACCESS_KEY_ID }}
      aws_ses_secret_access_key: ${{ secrets.AWS_SES_SECRET_ACCESS_KEY }}
      DATABASE_ENGINE: ${{ secrets.DATABASE_ENGINE }}
      db_host: ${{ secrets.DB_HOST }}
      db_password: ${{ secrets.DB_PASSWORD }}
      db_port: ${{ secrets.DB_PORT }}
      db_username: ${{ secrets.DB_USERNAME }}
      django_secret_key: ${{ secrets.DJANGO_SECRET_KEY }}
      fcm_server_key: ${{ secrets.FCM_SERVER_KEY }}
    run: |
      docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG .
      docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG
      echo "image=$ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG" >> $GITHUB_ENV

在我的 Dockerfile 中,我添加了以下内容:

ENV aws_ses_access_key_id=$aws_ses_access_key_id aws_ses_secret_access_key=$aws_ses_secret_access_key DATABASE_ENGINE=$DATABASE_ENGINE db_host=$db_host db_password=$db_password db_port=$db_port db_username=$db_username django_secret_key=$django_secret_key fcm_server_key=$fcm_server_key

没有任何变量通过。我试过使用 $variable_name 和 ${variable_name} 没有运气。我做错了什么?

【问题讨论】:

    标签: dockerfile github-actions


    【解决方案1】:

    在 Dockerfile 中的 ENV 指令的值中使用美元替换不会扩展为调用 docker build 的主机的 环境 变量,而是替换为 Docker ARG 值,您可以通过--build-arg ARG_NAME=ARG_VALUE 命令行参数将其传递给docker build 命令,然后您可以在ENV 指令中将ARG_NAME 的值替换为$ARG_NAMEARG_VALUE

    见:https://docs.docker.com/engine/reference/commandline/build/#set-build-time-variables---build-arg

    您可以在 Dockerfile 中使用 ENV 指令来定义变量值。这些值保留在构建的映像中。然而,坚持往往不是你想要的。用户希望根据他们构建映像的主机来指定不同的变量。 一个很好的例子是用于拉取中间文件的 http_proxy 或源版本。 ARG 指令允许 Dockerfile 作者定义用户可以在构建时使用 --build-arg 标志设置的值

    此标志允许您传递像常规环境变量一样在 Dockerfile 的 RUN 指令中访问的构建时变量。此外,这些值不会像 ENV 值那样保留在中间或最终图像中。您必须为每个构建参数添加 --build-arg。

    【讨论】:

    • 不建议使用构建时变量来传递秘密。任何使用 docker history 命令的图像用户都可以看到构建时变量值。 Docker reference
    • 我什么都试过了,还是不行。有人可以帮忙吗?
    猜你喜欢
    • 2021-09-30
    • 2021-11-22
    • 2021-02-13
    • 2021-12-06
    • 1970-01-01
    • 2022-06-17
    • 2023-01-27
    • 1970-01-01
    • 2021-12-03
    相关资源
    最近更新 更多