【问题标题】:Azure Devops Pipeline - file not found in build contextAzure Devops Pipeline - 在构建上下文中找不到文件
【发布时间】:2021-07-24 05:46:03
【问题描述】:

在 Azure DevOps Pipeline 中遇到错误:

Step 7/17 : COPY ["demo6/demo6.csproj", "demo6/"]
COPY failed: file not found in build context or excluded by .dockerignore: stat demo6/demo6.csproj: file does not exist

注意-在诊断模式下运行管道并且 .sln 文件存在

##[debug]cwd=/home/vsts/work/1/s
##[debug]  /home/vsts/work/1/s/demo6.sln (file)
##[debug]  /home/vsts/work/1/s/demo6/demo6.csproj (file)

我有一个多项目 Asp.Net Core 解决方案,其文件夹结构和项目如下:

demo6
 |--demo6/demo6.csproj
 |--demo6.api/demo6.api.csproj

应用程序是 demo6,它引用了类库 demo6.api。

这是在 GitHub 中的存储库 demo6。我修改了自动生成的 Dockerfile 以添加额外的 demo6/ 以查看是否有效,但没有。

感谢任何帮助。

Dockerfile 如下:

FROM mcr.microsoft.com/dotnet/aspnet:3.1 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/sdk:3.1 AS build
WORKDIR /src
COPY ["demo6/demo6.csproj", "demo6/"]
RUN dotnet restore "demo6/demo6.csproj"
COPY . .
WORKDIR "/src/demo6"
RUN dotnet build "demo6.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "demo6.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "demo6.dll"]

也试过这个:

FROM mcr.microsoft.com/dotnet/aspnet:3.1 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/sdk:3.1 AS build
WORKDIR /src
COPY ["demo6/demo6/demo6.csproj", "ddemo6/"]
RUN dotnet restore "ddemo6/demo6.csproj"
COPY . .
WORKDIR "/src/ddemo6"
RUN dotnet build "demo6.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "demo6.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "demo6.dll"]

收到此错误:

Step 7/17 : COPY ["demo6/demo6/demo6.csproj", "ddemo6/"]
COPY failed: file not found in build context or excluded by .dockerignore: stat demo6/demo6/demo6.csproj: file does not exist
##[error]COPY failed: file not found in build context or excluded by .dockerignore: stat demo6/demo6/demo6.csproj: file does not exist

这是回购结构

【问题讨论】:

  • 本地测试时docker build运行正常吗?
  • 文件树的写入方式,从根目录开始,路径为demo6/demo6/demo6.csproj
  • 是的,我把它放在 github 上,创建了管道
  • @khuynh,是的,我也试过了,但没用
  • 嗨@Kumar,根据错误消息,似乎在demo6/demo6.csproj 路径上找不到文件,你能在这里分享一下回购结构的截图吗?谢谢。

标签: c# docker asp.net-core azure-devops azure-pipelines


【解决方案1】:

file not found错误的原因可能是Dockerfilecsproj的相对路径不同。尝试在解决方案的根目录中设置Dockerfile 应该可以解决您的错误。

您还需要在csproj 文件夹中添加buildContext

buildContext:构建上下文的路径

另外,这里有一个case,你可以参考一下。

COPY 失败的另一个可能原因:没有指定源文件是 .dockerignore 文件存在于您的工作区中

寻找 .dockerignore 文件,因为 docker 的 CLI(命令行界面)将上下文发送到 docker 守护进程以加载 .dockerignore 文件。

如果上下文中存在.dockerignore 文件,则可能存在排除条目以忽略构建目录

# ignore or exclude build directory
*/build*
*/*/build*

【讨论】:

    猜你喜欢
    • 2020-04-06
    • 2020-02-24
    • 2019-05-01
    • 2019-05-05
    • 1970-01-01
    • 1970-01-01
    • 2021-01-02
    • 2020-05-26
    • 1970-01-01
    相关资源
    最近更新 更多