如何将第三方 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:/...
路径。
我有一个多层项目和一个第三方 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:/...
路径。