Приветствую
Есть несколько апп, и все они собираются по одинаковой структуре Dockerfile, различаются лишь именем каталога при компиляции приложения, и именем исполняемого файла, поэтому приходится использовать несколько докерфайлов.
Хочу сделать один шаблонный параметризованный Dockerfile.
С именами каталогов все отлично залетело, но столкнулся с проблемой на слое ENTRYPOINT.
Если он описан в форме json (exec), то в него переменная не подставляется.
ENTRYPOINT ["dotnet", "${APPLICATION}.dll"]
Если в shell - то параметризация отрабатывает успешно
ENTRYPOINT ["sh","-c","exec dotnet ${APPLICATION}.dll"]
Но что, если мне принципиально важно чтобы ENTRYPOINT оставался в JSON форме?
Я придумал вариант сделать линк, и он работает, но дополнительный слой и такой колхоз мне не нравится)
RUN ln -s "${APPLICATION}.dll" /app/app.dll
ENTRYPOINT ["dotnet","/app/app.dll"]
Вот пример моего Dockerfile (__APP__ - имя сервиса):
FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build-env
WORKDIR /app
ENV DOTNET_NUGET_SIGNATURE_VERIFICATION=false
COPY . .
RUN cd __APP__ && dotnet publish -c Release -o publish /p:DebugType=None /p:DebugSymbols=false
FROM mcr.microsoft.com/dotnet/aspnet:9.0
WORKDIR /app
COPY --from=build-env /app/__APP__/publish .
ENTRYPOINT ["dotnet", "__APP__.dll"]