Задать вопрос
@mersiders

Как использование переменные в Entrypoint Dockerfile?

Приветствую
Есть несколько апп, и все они собираются по одинаковой структуре 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"]
  • Вопрос задан
  • 46 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 1
VoidVolker
@VoidVolker
Dark side eye. А у нас печеньки! А у вас?
https://docs.docker.com/build/building/variables/
ARG NODE_VERSION="20"
ARG ALPINE_VERSION="3.21"

FROM node:${NODE_VERSION}-alpine${ALPINE_VERSION} AS base
...

docker build --build-arg NODE_VERSION=current .
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы