在Dockerfile中公开具有不同名称的环境变量
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Dockerfile中公开具有不同名称的环境变量相关的知识,希望对你有一定的参考价值。
我正在为包含基于ASP.NET Core 2.2的应用程序的容器创建Dockerfile。
要通过.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" ]
有什么建议吗?
答案
您遇到的问题是因为ENV仅在构建时进行评估,而不是在运行时重新评估。因此,如果重新配置“LOGGLY_APIKEY”ENV变量,则在启动映像时它不会发生变化。
如果要在运行时评估和复制它们,可以使用shell脚本包装器。创建一个start.cmd,在构建时复制它,然后更改入口点以使用start.cmd文件作为第一个参数。
set NYBUS_Nybus__RabbitMq__Connection__Hostname=%RABBITMQ_HOSTNAME%
.... Other set values ....
shift
start %*
您的dockerfile将具有以下入口点:
ENTRYPOINT [ "start.cmd", "dotnet", "App.dll" ]
另一答案
对于短名称,请尝试使用ARG而不是ENV。
以上是关于在Dockerfile中公开具有不同名称的环境变量的主要内容,如果未能解决你的问题,请参考以下文章
Powershell Array Strings - 在 SSIS 中映射不同的变量参数名称