Docker 运行 dotnet Build 始终缓存导致连续错误

Docker RUN dotnet Build always cached resulting in consecutive fault

我目前正在为 .net Core 3.1 的 Docker 构建而苦苦挣扎,其中 RUN 步骤被缓存,它们不应该被缓存,因为这应该总是被执行:

#10 [build 4/4] RUN dotnet publish "WKIS Solution.sln" -c UserManagementFrontendRelease -p:version=1.2.4 -o /app/publish --configfile FrontendWebApplication.UserManagement.Cicd/nuget.config
#10 sha256:e8aeefc43305f5ab93d8c8fb78658174bdaa14d42c560daf9d764848da7f251c
#10 CACHED

这很可能是以下步骤失败的原因:错误:“/app/publish”未找到:未找到

#14 [final 2/2] COPY --from=base /app/publish .
#14 sha256:4a30ee4113a62bfd40731cdb0cd3a498eaee357df5736019ebd0629bd07f178e
#14 ERROR: "/app/publish" not found: not found

我将Windows上的Docker桌面更新到20.10.11版本,构建dea9396,结果输出看起来略有不同,但结果相同:

=> CACHED [base 2/2] WORKDIR /app                                                                                 0.0s
=> CACHED [build 2/4] WORKDIR /src                                                                                0.0s
=> CACHED [build 3/4] COPY . .                                                                                    0.0s
=> CACHED [build 4/4] RUN dotnet publish "WKIS Solution.sln" -c UserManagementFrontendRelease -p:version=1.2.4 -  0.0s

docker文件很简单:

FROM registry.intranet.company/ubi8/dotnet-31-runtime AS base

WORKDIR /app
EXPOSE 80

FROM registry.intranet.company/ubi8/dotnet-31 AS build

WORKDIR /src
USER root
COPY . .

RUN dotnet publish "WKIS Solution.sln" -c UserManagementFrontendRelease -p:version=1.2.4 -o /app/publish --configfile FrontendWebApplication.UserManagement.Cicd/nuget.config

USER default
FROM build AS final

WORKDIR /app
COPY --from=base /app/publish .
ENTRYPOINT ["dotnet", "FrontendWebApplication.UserManagement.dll"]

我已经尝试过以下方法来解决问题:

我不是 100% 确定缓存是否对无法找到的文件夹负责,所以原因可能完全不同,但由于我找不到禁用缓存的方法,我根本不知道,这是我的最佳猜测。

最后一个复制命令应该来自构建,而不是来自基础,您正在发布到构建付款人,然后从基础层创建最终版本。缓存不是问题。

COPY --from=build /app/publish .