应用程序未从 github 到 docker 构建检索机密
Application does not retrieve secrets from github through docker build
我有以下 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 文件夹,但其中没有任何内容。
如果我忽略整个 运行 --mount 部分,则不会创建机密文件夹。
此外,我正在尝试在我的 startup.cs:
中访问此配置
{
Environment.SetEnvironmentVariable("AUTHORITY", Configuration["AUTHORITY"]);
Environment.SetEnvironmentVariable("CLIENTID", Configuration["CLIENTID"]);
}
不确定这是否正确,但是当我 运行 docker 图像并访问本地主机以查看它是否有效时,它会抛出与重定向到 Open ID Authority 相关的错误因为这些环境变量最终为空字符串。弄清楚如何做最后一部分无论如何都是徒劳的,因为我认为秘密在 Dockerfile 步骤中丢失了。我需要让那部分工作来弄清楚最后一部分。所以这就是目前的主要问题。
有什么线索吗?
您可以使用ARGS
解决问题。
下面的代码片段可能对您有所帮助。
- 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
我有以下 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 文件夹,但其中没有任何内容。 如果我忽略整个 运行 --mount 部分,则不会创建机密文件夹。
此外,我正在尝试在我的 startup.cs:
中访问此配置 {
Environment.SetEnvironmentVariable("AUTHORITY", Configuration["AUTHORITY"]);
Environment.SetEnvironmentVariable("CLIENTID", Configuration["CLIENTID"]);
}
不确定这是否正确,但是当我 运行 docker 图像并访问本地主机以查看它是否有效时,它会抛出与重定向到 Open ID Authority 相关的错误因为这些环境变量最终为空字符串。弄清楚如何做最后一部分无论如何都是徒劳的,因为我认为秘密在 Dockerfile 步骤中丢失了。我需要让那部分工作来弄清楚最后一部分。所以这就是目前的主要问题。
有什么线索吗?
您可以使用ARGS
解决问题。
下面的代码片段可能对您有所帮助。
- 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