这是通过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与这些步骤来运行多克尔体形:
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
我不知道是否需要在Dockerfile内或在DevOps上的控制台脚本步骤中更改某些内容
答案 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
命令的扩展说明中了解上下文。