Предоставить переменные окружения с другим именем в Dockerfile - PullRequest
0 голосов
/ 26 февраля 2019

Я создаю Dockerfile для контейнера, который будет содержать приложение на основе ASP.NET Core 2.2.

Чтобы воспользоваться переменными среды через систему конфигурации .NET, я должен использоватьопределенный формат, но это делает переменные окружения довольно уродливыми.

FROM microsoft/dotnet:2.2-sdk AS build
WORKDIR /src
COPY src/ ./
RUN dotnet publish App/App.csproj -c Release -o /out

FROM microsoft/dotnet:2.2-runtime AS runtime
WORKDIR /app
COPY --from=build  /out ./
ENV NYBUS_ENVIRONMENT=Production

ENV NYBUS_LOGGLY__APIKEY=loggly \
    NYBUS_Nybus__RabbitMq__Connection__Hostname=host.docker.internal \
    NYBUS_Nybus__RabbitMq__Connection__Username=guest \
    NYBUS_Nybus__RabbitMq__Connection__Password=guest \
    NYBUS_Nybus__RabbitMq__UnackedMessageCountLimit=

ENTRYPOINT [ "dotnet", "App.dll" ]

Я пытался использовать параметры, но они, похоже, не работают

FROM microsoft/dotnet:2.2-sdk AS build
WORKDIR /src
COPY src/ ./
RUN dotnet publish App/App.csproj -c Release -o /out

FROM microsoft/dotnet:2.2-runtime AS runtime
WORKDIR /app
COPY --from=build  /out ./
ENV NYBUS_ENVIRONMENT=Production

ENV LOGGLY_APIKEY=loggly \
    RABBITMQ_HOSTNAME=host.docker.internal \
    RABBITMQ_USERNAME=guest \
    RABBITMQ_PASSWORD=guest \
    RABBITMQ_MESSAGE_LIMIT=

ENV NYBUS_LOGGLY__APIKEY=${LOGGLY_APIKEY} \
    NYBUS_Nybus__RabbitMq__Connection__Hostname=${RABBITMQ_HOSTNAME} \
    NYBUS_Nybus__RabbitMq__Connection__Username=${RABBITMQ_USERNAME} \
    NYBUS_Nybus__RabbitMq__Connection__Password=${RABBITMQ_PASSWORD} \
    NYBUS_Nybus__RabbitMq__UnackedMessageCountLimit=${RABBITMQ_MESSAGE_LIMIT}

ENTRYPOINT [ "dotnet", "App.dll" ]

Любое предложение?

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Проблема, с которой вы столкнулись, заключается в том, что ENV оценивается только во время сборки, а не переоценивается во время выполнения.Поэтому, если вы переконфигурируете переменную ENV «LOGGLY_APIKEY», она просто не изменится при запуске образа.

Если вы хотите, чтобы они оценивались и копировались во время выполнения, вы можете использовать оболочку сценария оболочки.Создайте файл start.cmd, скопируйте его во время сборки, а затем измените точку входа, чтобы использовать файл start.cmd в качестве первого аргумента.

set NYBUS_Nybus__RabbitMq__Connection__Hostname=%RABBITMQ_HOSTNAME%
.... Other set values ....
shift
start %*

Ваш файл Docker будет иметь точку входа:

ENTRYPOINT [ "start.cmd", "dotnet", "App.dll" ]
0 голосов
/ 27 февраля 2019

Попробуйте ARG вместо ENV для коротких имен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...