#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. Рад, что это помогло. Не стесняйтесь принять мой ответ как ответ и проголосовать за ответ.