在Azure DevOps上运行DockerFile build命令时找不到项目依赖项

时间:2019-02-02 18:24:12

标签: azure docker azure-devops dockerfile azure-pipelines

这是通过VS2017产生的Dockerfile。 我对在Azure DevOps上使用它进行了一些更改

FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base
WORKDIR /app
EXPOSE 80

FROM microsoft/dotnet:2.1-sdk AS build
WORKDIR /src
COPY ["WebApi.csproj", "WebApi/"]
COPY ["./MyProject.Common/MyProject.Common.csproj", "MyProj.Common/"]
RUN dotnet restore "MyProject.WebApi/MyProject.WebApi.csproj"
COPY . .
WORKDIR "/src/MyProject.WebApi"
RUN dotnet build "MyProject.WebApi.csproj" -c Release -o /app

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

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

解决方案结构

MyProject.sln
   -MyProject.Common
     ...
   -MyProject.WebApi
       ...
       Dockerfile

我已经创建了一个构建流水线下天青的DevOps与这些步骤来运行多克尔体形:

  1. 从天青回购GIT中获取源步骤
  2. 代理作业(托管Ubuntu 1604)
  3. 命令行脚本docker build -t WebApi .

我有这个错误

2019-02-02T18:14:33.4984638Z  ---> 9af3faec3d9e
2019-02-02T18:14:33.4985440Z Step 7/17 : COPY ["./MyProject.Common/MyProject.Common.csproj", "MyProject.Common/"]
2019-02-02T18:14:33.4999594Z COPY failed: stat /var/lib/docker/tmp/docker-builder671248463/MyProject.Common/MyProject.Common.csproj: no such file or directory
2019-02-02T18:14:33.5327830Z ##[error]Bash exited with code '1'.
2019-02-02T18:14:33.5705235Z ##[section]Finishing: Command Line Script

附有使用的工作目录的屏幕截图 enter image description here

我不知道是否需要在Dockerfile内或在DevOps上的控制台脚本步骤中更改某些内容

1 个答案:

答案 0 :(得分:1)

这仅仅是一种预感,但考虑您的Dockerfile位于下MyProject.WebApi,你想从MyProject.Common这是在同一水平上,那么你可能需要指定复制文件运行docker build时使用另一个上下文根目录:

docker build -t WebApi -f Dockerfile ../

当Docker构建映像时,它会收集一个上下文-生成期间可以访问并可以复制到映像中的文件列表。

当您运行docker build -t WebApi .时,它将运行在MyProject.WebApi目录和目录.中的所有文件中(除非您有.dockerignore文件),即MyProject.WebApi在这种情况下,包含在上下文中。但是MyProject.Common不是上下文的一部分,因此您无法从中复制任何内容。

希望这会有所帮助

编辑:也许您不需要指定Working Directory(如屏幕截图所示),那么命令将变为:

docker build -t WebApi -f MyProject.WebApi/Dockerfile .

在这种情况下,Docker将使用位于Dockerfile内的MyProject.WebApi,并将属于该解决方案的所有文件包含到上下文中。

您还可以在official documentation中的docker build命令的扩展说明中了解上下文。