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"]
我已经尝试过以下方法来解决问题:
- 在 docker
中全部修剪
- 停止和启动Docker桌面
- 呼叫
docker build --no-cache
- 在 Docker 文件中的
RUN
语句中添加 --no-cache 选项,如下所示:RUN dotnet publish "WKIS Solution.sln" -c UserManagementFrontendRelease -p:version=1.2.4 -o /app/publish --configfile FrontendWebApplication.UserManagement.Cicd/nuget.config --no-cache
我不是 100% 确定缓存是否对无法找到的文件夹负责,所以原因可能完全不同,但由于我找不到禁用缓存的方法,我根本不知道,这是我的最佳猜测。
最后一个复制命令应该来自构建,而不是来自基础,您正在发布到构建付款人,然后从基础层创建最终版本。缓存不是问题。
COPY --from=build /app/publish .
我目前正在为 .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"]
我已经尝试过以下方法来解决问题:
- 在 docker 中全部修剪
- 停止和启动Docker桌面
- 呼叫
docker build --no-cache
- 在 Docker 文件中的
RUN
语句中添加 --no-cache 选项,如下所示:RUN dotnet publish "WKIS Solution.sln" -c UserManagementFrontendRelease -p:version=1.2.4 -o /app/publish --configfile FrontendWebApplication.UserManagement.Cicd/nuget.config --no-cache
我不是 100% 确定缓存是否对无法找到的文件夹负责,所以原因可能完全不同,但由于我找不到禁用缓存的方法,我根本不知道,这是我的最佳猜测。
最后一个复制命令应该来自构建,而不是来自基础,您正在发布到构建付款人,然后从基础层创建最终版本。缓存不是问题。
COPY --from=build /app/publish .