Azure DevOps管道 - 在生成环境中找不到文件

6

在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

这是代码库的结构enter image description here


1
在本地测试时,Docker 构建是否运行正常? - Daniel Mann
1
你的文件树结构是这样写的,从根目录开始,路径应该是 demo6/demo6/demo6.csproj - hkennyv
1
是的,它在那之后就能正常工作了。我将它放在了Github上并创建了管道。 - Kumar
@khuynh,是的,我也尝试过那个方法,但它没有起作用。 - Kumar
@VitoLiu-MSFT 添加了截图。 - Kumar
显示剩余4条评论
1个回答

4
文件未找到错误的原因可能是Dockerfilecsproj的相对路径不同。尝试将Dockerfile设置为解决方案的根目录应该可以解决您的错误。
此外,您需要添加一个buildContextcsproj文件夹一起使用。 buildContext:构建上下文的路径。
另外,在这里有一个您可以参考的案例
COPY失败的另一个可能原因是您的工作区中存在.dockerignore文件。
查找.dockerignore文件,因为Docker CLI(命令行界面)会将上下文发送到Docker守护程序以加载.dockerignore文件。
如果上下文中存在.dockerignore文件,则可能存在排除条目以忽略构建目录。
# ignore or exclude build directory
*/build*
*/*/build*

根据这个答案,我通过在 Docker 构建任务(经典管道)中取消选中“使用默认构建上下文”来解决了我的问题。对于 YAML,我相信等效的设置是 defaultContext: false。我将“构建上下文”留空,这将上下文设置为根解决方案文件夹,正如 Dockerfile 所期望的那样。 - Joel Leach

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接