如何在 Docker 图像中动态设置入口点 dll
How to set the entrypoint dll dynamically in Docker image
我们想为几个不同的项目使用一个 Dockerfile
。
项目结构相同,唯一不同的是 Dockerfile 关注的是入口点 dll
。
下面是其中一个 Dockerfile
的样子:
FROM mcr.microsoft.com/dotnet/runtime:5.0-alpine3.13-amd64
WORKDIR /app
COPY . .
ENTRYPOINT ["dotnet", "dllName.dll"]
我想过类似的事情:
FROM mcr.microsoft.com/dotnet/runtime:5.0-alpine3.13-amd64
ARG DLL_NAME
RUN echo "Building for $DLL_NAME"
WORKDIR /app
COPY . .
ENTRYPOINT ["dotnet", $DLL_NAME]
并构建它:--build-arg "DLL_NAME=dllName.dll"
但是,当 运行 图像时,ENTRYPOINT ["dotnet", $DLL_NAME]
命令似乎无法执行:
/bin/sh: [dotnet,: not found
RUN
指令需要来自环境的变量。
请尝试更改
FROM mcr.microsoft.com/dotnet/runtime:5.0-alpine3.13-amd64
ARG DLL_NAME
RUN echo "Building for $DLL_NAME"
WORKDIR /app
COPY . .
ENTRYPOINT ["dotnet", $DLL_NAME]
进入
FROM mcr.microsoft.com/dotnet/runtime:5.0-alpine3.13-amd64
ARG DLL_NAME
ENV DLL_NAME=$DLL_NAME
RUN echo "Building for $DLL_NAME"
WORKDIR /app
COPY . .
ENTRYPOINT /bin/sh dotnet $DLL_NAME
您可以在启动容器时动态指定 运行 命令。这得到 appended to the ENTRYPOINT
;但是,不需要 Dockerfile ENTRYPOINT
。如果在您的 Dockerfile 中将 ENTRYPOINT
更改为 CMD
FROM mcr.microsoft.com/dotnet/runtime:5.0-alpine3.13-amd64
WORKDIR /app
COPY . .
CMD ["dotnet", "dllName.dll"] # <-- not ENTRYPOINT
然后当您启动容器时,您可以轻松覆盖它,而无需重建任何东西
docker run ... my-image \
dotnet otherDll.dll
我们想为几个不同的项目使用一个 Dockerfile
。
项目结构相同,唯一不同的是 Dockerfile 关注的是入口点 dll
。
下面是其中一个 Dockerfile
的样子:
FROM mcr.microsoft.com/dotnet/runtime:5.0-alpine3.13-amd64
WORKDIR /app
COPY . .
ENTRYPOINT ["dotnet", "dllName.dll"]
我想过类似的事情:
FROM mcr.microsoft.com/dotnet/runtime:5.0-alpine3.13-amd64
ARG DLL_NAME
RUN echo "Building for $DLL_NAME"
WORKDIR /app
COPY . .
ENTRYPOINT ["dotnet", $DLL_NAME]
并构建它:--build-arg "DLL_NAME=dllName.dll"
但是,当 运行 图像时,ENTRYPOINT ["dotnet", $DLL_NAME]
命令似乎无法执行:
/bin/sh: [dotnet,: not found
RUN
指令需要来自环境的变量。
请尝试更改
FROM mcr.microsoft.com/dotnet/runtime:5.0-alpine3.13-amd64
ARG DLL_NAME
RUN echo "Building for $DLL_NAME"
WORKDIR /app
COPY . .
ENTRYPOINT ["dotnet", $DLL_NAME]
进入
FROM mcr.microsoft.com/dotnet/runtime:5.0-alpine3.13-amd64
ARG DLL_NAME
ENV DLL_NAME=$DLL_NAME
RUN echo "Building for $DLL_NAME"
WORKDIR /app
COPY . .
ENTRYPOINT /bin/sh dotnet $DLL_NAME
您可以在启动容器时动态指定 运行 命令。这得到 appended to the ENTRYPOINT
;但是,不需要 Dockerfile ENTRYPOINT
。如果在您的 Dockerfile 中将 ENTRYPOINT
更改为 CMD
FROM mcr.microsoft.com/dotnet/runtime:5.0-alpine3.13-amd64
WORKDIR /app
COPY . .
CMD ["dotnet", "dllName.dll"] # <-- not ENTRYPOINT
然后当您启动容器时,您可以轻松覆盖它,而无需重建任何东西
docker run ... my-image \
dotnet otherDll.dll