【发布时间】:2021-11-22 00:53:07
【问题描述】:
我有一个 .NET 6 控制台项目,其中包含 2 个二进制文件作为链接文件:
<ItemGroup>
<None Include="..\HFMath\bin\HFMath.dll" Link="HFMath.dll">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="..\HFMath\bin\libHFMath.so" Link="libHFMath.so">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
我需要将它部署为 docker 容器。 Visual Studio 搭建的 Dockerfile 是
FROM mcr.microsoft.com/dotnet/runtime:6.0 AS base
WORKDIR /app
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["ConsoleApp1/ConsoleApp1.csproj", "ConsoleApp1/"]
RUN dotnet restore "ConsoleApp1/ConsoleApp1.csproj"
COPY . .
WORKDIR "/src/ConsoleApp1"
RUN dotnet build "ConsoleApp1.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "ConsoleApp1.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "ConsoleApp1.dll"]
当我运行 docker build 时,我收到以下错误:
#15 1.054 Determining projects to restore...
#15 1.322 All projects are up-to-date for restore.
#15 2.552 /usr/share/dotnet/sdk/6.0.100/Microsoft.Common.CurrentVersion.targets(5100,5): error MSB3030: Could not copy the file "/src/HFMath/bin/libHFMath.so" because it was not found. [/src/ConsoleApp1/ConsoleApp1.csproj]
#15 2.552 /usr/share/dotnet/sdk/6.0.100/Microsoft.Common.CurrentVersion.targets(5100,5): error MSB3030: Could not copy the file "/src/HFMath/bin/HFMath.dll" because it was not found. [/src/ConsoleApp1/ConsoleApp1.csproj]
#15 2.556
#15 2.556 Build FAILED.
我知道 docker 不支持符号链接,但我仍然需要构建映像。 我该如何解决这个问题(不更改 .NET 项目)?
【问题讨论】:
-
文件是否被复制到容器中并位于错误中指定的路径?错误消息似乎表明它们不是。
-
@SimplyGed dockerfile 由 Visual Studio 搭建。不是手动创建的。它应该照顾需要的东西
-
HFMath.dll 是否存储在您的项目的
src文件夹下,例如src\HFMath\bin\HFMath.dll? Based on the.csproj` 文件和来自 Docker 的错误看起来像是在src之外? Docker 正在从src文件夹中复制文件以构建COPY . .,因此如果文件不在src文件夹中,则不会被复制。即使 VS 创建了 Dockerfile,也不能保证它会复制所有文件,尤其是当它们在build context之外时。 stackoverflow.com/questions/27068596/…HTH -
@SimplyGed 请注意,问题不是“为什么它不起作用”,而是“我该如何解决它”。您能否在不涉及项目的情况下展示一个我可以用来解决此问题的 Dockerfile?