Приложение не извлекает секреты с github через сборку docker

#c# #docker #.net-core #github-actions

Вопрос:

У меня есть следующее действие на 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) amp;amp; 
    export CLIENTID=$(cat /run/secrets/CLIENTID) amp;amp; 
WORKDIR /ProjectName/App
 

Это, по-видимому, создает папку var/run/secrets, но в ней нет содержимого.
Если я удалю всю эту часть RUN —mount, папка secrets не будет создана.

Кроме того, я пытаюсь получить доступ к этой конфигурации в моем файле startup.cs:

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

Не уверен, что это правильный путь, но когда я запускаю образ docker и посещаю localhost, чтобы проверить, работает ли он, он выдает ошибку, связанную с перенаправлением в центр открытых идентификаторов, потому что эти переменные среды заканчиваются пустыми строками. Выяснять, как выполнить последнюю часть, в любом случае бесполезно, потому что я думаю, что секреты теряются на этапе Dockerfile. Мне нужно, чтобы эта часть сработала, чтобы разобраться с последней частью. Так что в данный момент это в основном проблема.

Есть какие-нибудь зацепки?

Ответ №1:

Вы можете использовать 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

 

Комментарии:

1. Это действительно помогло. Я заставил его работать, установив ENV в файле dockerfile для этих аргументов. Теперь все это работает. Мне также не нужно было устанавливать переменные среды в конфигурацию[«значение»], потому что переменные уже были установлены для меня.

2. Рад, что это помогло. Не стесняйтесь принять мой ответ как ответ и проголосовать за ответ.