这是通过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
我创建了Azure的下一个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控制台脚本一步东西
这仅仅是一种预感,但考虑您的Dockerfile
位于下MyProject.WebApi
,你想从MyProject.Common
这是在同一水平上复制文件,那么你可能需要在运行时docker build
以指定不同的上下文根目录:
docker build -t WebApi -f Dockerfile ../
当码头工人构建一个图像采集它的上下文 - 这是构建过程中获得,并且也被复制到图像文件的列表。
当您运行docker build -t WebApi .
它运行MyProject.WebApi
目录和目录.
的所有文件(除非你有.dockerignore
文件),这是在这种情况下MyProject.WebApi
内,被纳入环境。但是MyProject.Common
不是上下文的一部分,因此你不能复制的任何事情。
希望这可以帮助
编辑:也许你不不需要指定Working Directory
(屏幕截图所示),那么该命令会变成:
docker build -t WebApi -f MyProject.WebApi/Dockerfile .
在这种情况下,泊坞窗将使用位于内Dockerfile
MyProject.WebApi
和包括属于溶液进入环境中的所有文件。
您还可以阅读关于在docker build
的official documentation命令扩展描述上下文。