如何将第三方 DLL 添加到 DockerFile? C#

How to add a third-party DLL to a DockerFile? C#

我有一个多层项目和一个第三方 DLL 文件,我想对它们进行 docker 化。我在我的 webApi 项目中添加了一个 dockerfile 并尝试构建它但是发生了这个错误:

3>Step 7/22 : COPY ["D:/MultiLayeredProject/output/MultiLayeredProject/PluginProject.dll", "MultiLayeredProject/"] 3>COPY failed: stat /var/lib/docker/tmp/docker-builder959745697/D:/MultiLayeredProject/output/MultiLayeredProject/PluginProject.dll: no such file or directory 3>C:\Users~~\source\repos\MultiLayeredProject\MultiLayeredProject\Dockerfile : error CTC1014: Docker command failed with exit code 1. 3>C:\Users~~\source\repos\MultiLayeredProject\MultiLayeredProject\Dockerfile : error CTC1014: COPY failed: stat /var/lib/docker/tmp/docker-builder959745697/D:/MultiLayeredProject/output/MultiLayeredProject/PluginProject.dll: no such file or directory

如何将外部 DLL 添加到 dockerfile?我的 dockerfile 如下所示:

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

FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src
COPY ["D:/MultiLayeredProject/output/MultiLayeredProject/PluginProject.dll", "MultiLayeredProject/"]
COPY ["MultiLayeredProject/MultiLayeredProject.csproj", "MultiLayeredProject/"]
COPY ["AppService/AppService.csproj", "AppService/"]
COPY ["Core/Core.csproj", "Core/"]
RUN dotnet restore "MultiLayeredProject/MultiLayeredProject.csproj"`
COPY . .
WORKDIR "/src/MultiLayeredProject"
RUN dotnet build "MultiLayeredProject.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "MultiLayeredProject.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "MultiLayeredProject.dll"]

据我了解,您的第三方 dll 是项目文件夹的一部分。因此,不要使用文件的绝对路径,而是尝试使用相对路径,例如:

COPY ["output/MultiLayeredProject/PluginProject.dll", "MultiLayeredProject/"]

当您调用 docker build 时,docker cli 将您的项目结构(上下文)发送到 docker 守护进程(在 Linux OS 内部)并且有没有 D:/... 路径。