使用带有参数的入口点来决定将哪个 .dll 添加到 运行

Using Entrypoint with arguments to decide which .dll to run

我正在试验 Docker 并使用参数来决定图像中的代码应该开始。

我有这两个入口点,如果 运行 它们自己都可以工作。

ENTRYPOINT ["dotnet", "MultiStart.API.dll"]
ENTRYPOINT ["dotnet", "MultiStart.Worker1.dll"]

我想在调用 docker run

时通过使用参数来决定哪个是 运行

我已经按照

的思路尝试了几件事
CMD ["dotnet", $start]
ENTRYPOINT ./dotnet $start
ENTRYPOINT ["dotnet", $start]
ENTRYPOINT ["dotnet" $start]

然后使用类似这样的方式调用它。

docker run -d -p 8080:80 -e start=MultiStart.API.dll --name multi multistart

但无论我做什么,我都会遇到这个错误(或其中的一些变体):

/bin/sh: 1: ./dotnet: not found

关于如何实现这一点有什么建议吗?


为清楚起见,我将包括将启动两个进程之一的整个 Docker文件。

FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["src", "src"]
COPY ["*.sln", ""]

RUN dotnet restore "src/MultiStart.API/MultiStart.API.csproj"
RUN dotnet restore "src/MultiStart.Worker1/MultiStart.Worker1.csproj"
COPY . .
WORKDIR "/src/src"
RUN dotnet build "MultiStart.API/MultiStart.API.csproj" -c Release -o /app/build
RUN dotnet build "MultiStart.Worker1/MultiStart.Worker1.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "MultiStart.API/MultiStart.API.csproj" -c Release -o /app/publish
RUN dotnet publish "MultiStart.Worker1/MultiStart.Worker1.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .

# both of these work by themselves.
#ENTRYPOINT ["dotnet", "MultiStart.API.dll"]  
ENTRYPOINT ["dotnet", "MultiStart.Worker1.dll"]

docker run不能这样传递变量,毕竟docker文件不是bash脚本。 最简单的方法是

docker文件

ENTRYPOINT ["command"]

docker 运行

docker run imagename argument list

如果要在docker文件中声明变量,可以使用ARG or ENV.