这是我使用 Visual Studio 2022 创建的 dockerfile:
#See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging.
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
USER app
WORKDIR /app
EXPOSE 8080
EXPOSE 8081
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
ARG BUILD_CONFIGURATION=Release
WORKDIR /src
COPY ["backend/backend.csproj", "backend/"]
RUN dotnet restore "./backend/backend.csproj"
COPY . .
WORKDIR "/src/backend"
RUN dotnet build "./backend.csproj" -c $BUILD_CONFIGURATION -o /app/build
FROM build AS publish
ARG BUILD_CONFIGURATION=Release
RUN dotnet publish "./backend.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "backend.dll"]
我的文件结构设置如下:
->Backend.csproj
|
->Various project files and folders
->DockerFile
当在 Azure 中构建管道时,我们收到此错误:
##[错误]#2 完成 0.0 秒 ##[错误]#3 [内部] 加载 mcr.microsoft.com/dotnet/sdk:8.0 的元数据 ##[错误]#3 完成 0.2 秒 ##[错误]#4 [内部]加载.dockerignore ##[错误]#4 传输上下文:2B 完成 ##[错误]#4 完成 0.0 秒 ##[错误]#5 [基数 1/2] 来自 mcr.microsoft.com/dotnet/aspnet:8.0 ##[错误]#5 完成 0.1 秒 ##[错误]#6 [内部]加载构建上下文 ##[错误]#6 传输上下文:68.54kB 0.0s 完成 ##[错误]#6 完成 0.1 秒 ##[错误]#7 [构建 1/7] 来自 mcr.microsoft.com/dotnet/sdk:8.0@sha256:02fdc848bbda5d57d9211a72c99bd665b421206002d66b8bc2cc0b2297c227fa ##[错误]#7 解析 mcr.microsoft.com/dotnet/sdk:8.0@sha256:02fdc848bbda5d57d9211a72c99bd665b421206002d66b8bc2cc0b2297c227fa 0.0 秒完成 ##[错误]#7 sha256:784e7bf6f3d8d3224492fc1b69030a48b7698ab7f87061bcb9cdc269941a3a60 2.22kB / 2.22kB 已完成 ##[错误]#7 sha256:1effa123c762f7f70587193ac9ed4b30255aae043abb6587a639a5339a8b9faf 5.67kB / 5.67kB 已完成 ##[错误]#7 sha256:02fdc848bbda5d57d9211a72c99bd665b421206002d66b8bc2cc0b2297c227fa 1.08kB / 1.08kB 已完成 ##[错误]#7 已取消 ##[错误]#8 [构建 2/7] WORKDIR /src ##[错误]#8 缓存 ##[错误]#9 [构建 3/7] 复制 [backend/backend.csproj, backend/] ##[错误]#9 错误:无法计算引用 2686415c-d675-4aa2-a9d0-5b8f2b68eac4::pvmze5n8ahasa8psyougi22ap 的校验和: “/backend/backend.csproj”:未找到 ##[错误]#10 [基数 2/2] WORKDIR /app ##[错误]#10 完成 0.0 秒 ##[错误] - - - ##[错误] > [构建 3/7] 复制 [backend/backend.csproj, backend/]: ##[错误] - - - ##[错误]Dockerfile:12 ##[错误] - - - - - - - - - - ##[错误] 10 | ARG BUILD_CONFIGURATION=发布 ##[错误] 11 | 工作目录/src ##[错误] 12 | >>> 复制 ["backend/backend.csproj", "backend/"] ##[错误] 13 | 运行 dotnet 恢复“./backend/backend.csproj” ##[错误] 14 | 复制 。 。 ##[错误] - - - - - - - - - - ##[错误]错误:无法解决:无法计算缓存键:无法计算引用的校验和 2686415c-d675-4aa2-a9d0-5b8f2b68eac4::pvmze5n8ahasa8psyougi22ap: “/backend/backend.csproj”:未找到 ##[错误]进程“/usr/bin/docker”失败,退出代码为 1
当我在 VS 2022 中运行构建时,它会构建容器并且工作正常。 当我将其签入 Azure 时,构建失败并出现此错误。 我尝试通过放置 ./backend 以及其他内容来调整第 12 行的路径,但没有任何运气。 我们做错了什么?我认为 VS 中的 docker 支持更容易。
错误:无法解决:无法计算缓存密钥:无法计算引用 2686415c-d675-4aa2-a9d0-5b8f2b68eac4::pvmze5n8ahasa8psyougi22ap 的校验和:“/backend/backend.csproj
问题的原因是,当您在Azure DevOps Pipeline中使用Docker任务时,工作目录将默认设置为与dockerfile相同的路径。
从文件结构来看,dockerfile 位于 .csproj 目录的下一个文件夹级别。在这种情况下,它将无法找到 .csproj 文件。
要解决此问题,您需要将
dockerfile
文件移动到与 Backend.csproj
文件相同的级别。
例如:
->dockerfile
->Backend.csproj
|
->Various project files and folders
然后就可以更改dockerfile中的Copy命令了。
COPY ["backend.csproj", "backend/"]
在这种情况下,将在 docker 构建任务中找到
Backend.csproj
。
在以下 docker 构建步骤中,您可能会在 dotnet 构建行遇到以下错误:
CSC:错误CS5001:程序不包含适合入口点的静态“Main”方法
要解决这个问题,需要将工程文件复制到路径:
/src/backend
例如:
COPY . /src/backend
dockerfile 示例:
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
USER app
WORKDIR /app
EXPOSE 8080
EXPOSE 8081
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
ARG BUILD_CONFIGURATION=Release
WORKDIR /src
COPY ["backend.csproj", "backend/"]
RUN dotnet restore "./backend/backend.csproj"
COPY . /src/backend
WORKDIR "/src/backend"
RUN dotnet build "./backend.csproj" -c $BUILD_CONFIGURATION -o /app/build
FROM build AS publish
ARG BUILD_CONFIGURATION=Release
RUN dotnet publish "./backend.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "backend.dll"]