首页 > 解决方案 > 如何将第三方 DLL 添加到 DockerFile?C#

问题描述

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

3>步骤 7/22:复制 ["D:/MultiLayeredProject/output/MultiLayeredProject/PluginProject.dll", "MultiLayeredProject/"] 3>复制失败:stat /var/lib/docker/tmp/docker-builder959745697/D: /MultiLayeredProject/output/MultiLayeredProject/PluginProject.dll:没有这样的文件或目录 3>C:\Users~~\source\repos\MultiLayeredProject\MultiLayeredProject\Dockerfile:错误 CTC1014:Docker 命令失败,退出代码为 1。3>C: \Users~~\source\repos\MultiLayeredProject\MultiLayeredProject\Dockerfile : 错误 CTC1014: COPY failed: stat /var/lib/docker/tmp/docker-builder959745697/D:/MultiLayeredProject/output/MultiLayeredProject/PluginProject.dll: 没有文件或目录

如何将外部 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"]

标签: docker.net-coreasp.net-core-webapi

解决方案


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

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

当您调用docker cli 时docker build,docker cli 会将您的项目结构(上下文)发送到 docker daemon(Linux 操作系统内部)并且没有D:/...路径。


推荐阅读