应用程序不会通过 docker build 从 github 检索秘密

Posted

技术标签:

【中文标题】应用程序不会通过 docker build 从 github 检索秘密【英文标题】:Application does not retrieve secrets from github through docker build 【发布时间】:2021-12-05 12:49:03 【问题描述】:

我有以下 github 操作来构建和发布 docker 映像:

      # Build and push Docker image with Buildx (don't push on PR)
  # https://github.com/docker/build-push-action
  - name: Build and push Docker image
    uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc
    with:
      context: .
      push: $ github.event_name != 'pull_request' 
      tags: $ steps.meta.outputs.tags 
      labels: $ steps.meta.outputs.labels 
      secrets: |
        "AUTHORITY=$ secrets.AUTHORITY "
        "CLIENTID=$ secrets.CLIENTID "

这些应该被转移到 Dockerfile 中:

# Build runtime image
FROM mcr.microsoft.com/dotnet/aspnet:5.0
RUN --mount=type=secret,id=AUTHORITY \
    --mount=type=secret,id=CLIENTID \
    export AUTHORITY=$(cat /run/secrets/AUTHORITY) && \
    export CLIENTID=$(cat /run/secrets/CLIENTID) && \
WORKDIR /ProjectName/App

这似乎创建了一个 var/run/secrets 文件夹,但其中没有任何内容。 如果我省略整个 RUN --mount 部分,则不会创建 secrets 文件夹。

此外,我正在尝试在我的 startup.cs 中访问此配置:

        
            Environment.SetEnvironmentVariable("AUTHORITY", Configuration["AUTHORITY"]);
            Environment.SetEnvironmentVariable("CLIENTID", Configuration["CLIENTID"]);
        

不确定这是否正确,但是当我运行 docker 映像并访问 localhost 以查看它是否有效时,它会引发与重定向到 Open ID Authority 相关的错误,因为这些环境变量最终为空字符串。弄清楚如何做最后一部分无论如何都是徒劳的,因为我认为秘密在 Dockerfile 步骤中丢失了。我需要使那部分工作以找出最后一部分。所以这主要是目前的问题。

有什么线索吗?

【问题讨论】:

【参考方案1】:

您可以使用ARGS解决问题。

下面的代码 sn-p 可能会对你有所帮助。

  - name: build docker image
    run: docker build -t $ steps.meta.outputs.tags  --build-arg AUTHORITY=$AUTHORITY -- build-arg CLIENTID=$CLIENTID .
    env:
       CLIENTID: $ secrets.CLIENTID 
       AUTHORITY: $ secrets.AUTHORITY 

在 Dockerfile 中,添加这些

# Build runtime image
FROM mcr.microsoft.com/dotnet/aspnet:5.0
ARGS AUTHORITY
ARGS CLIENTID
WORKDIR /ProjectName/App

【讨论】:

这真的很有帮助。我让它在 dockerfile 中将 ENV 设置为这些 ARG。现在整个事情都起作用了。我还必须不将环境变量设置为 Configuration["value"],因为已经为我设置了变量。 很高兴它有帮助。随意接受我的回答作为答案并投票赞成答案。

以上是关于应用程序不会通过 docker build 从 github 检索秘密的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式从Dockerfile中删除与docker build相关联的docker镜像

转换为docker-compose后,Docker卷不会保留数据

DockerMacOS上安装Docker

将 env 变量从 Google 的 Secret Manager 加载到在 Google Cloud Run 上运行但未通过 Cloud Build 部署的 Docker 容器中?

如何从 docker 容器通过 ssh 传输 TCP 流量?

docker build 使用代理构建镜像