带有docker和.NET Core 2.0的VSTS CI/CD-复制失败

带有docker和.NET Core 2.0的VSTS CI/CD-复制失败,docker,azure-devops,dockerfile,azure-pipelines,.net-core-2.0,Docker,Azure Devops,Dockerfile,Azure Pipelines,.net Core 2.0,在遵循几个.NETCore2.0VisualStudioTeamServices连续集成/连续交付示例时,我在VSTS中遇到了一个复制错误 通过VS17添加docker支持对于这样的dockerfile在本地非常有效 FROM microsoft/aspnetcore:2.0 ARG source WORKDIR /app EXPOSE 80 COPY ${source:-obj/Docker/publish} . ENTRYPOINT ["dotnet", "myapp.dll"] 通过MV

在遵循几个.NETCore2.0VisualStudioTeamServices连续集成/连续交付示例时,我在VSTS中遇到了一个复制错误

通过VS17添加docker支持对于这样的dockerfile在本地非常有效

FROM microsoft/aspnetcore:2.0
ARG source
WORKDIR /app
EXPOSE 80
COPY ${source:-obj/Docker/publish} .
ENTRYPOINT ["dotnet", "myapp.dll"]
通过MVC应用程序和WebAPI应用程序,它与docker compose在本地运行良好

当添加一个VSTS CI构建过程并运行它时,我总是在副本中出错

生成myapp服务“myapp”失败 生成:复制失败:GetFileAttributesEx \?\C:\Windows\TEMP\docker-builder91\obj\docker\publish: 系统找不到指定的路径。C:\程序 Files\Docker\Docker-compose.exe失败,返回代码:1


我找到的解决办法是

请注意,它们在linux docker机器上出错

复制失败:stat/var/lib/docker/tmp/docker-builder613328056/obj/docker/publish:没有这样的文件或目录 /usr/bin/docker失败,返回代码:1

解决方案:

像这样制作Dockerfile.ci

FROM microsoft/aspnetcore-build:2.0 AS build-env
WORKDIR /app

# Copy csproj and restore as distinct layers
COPY *.csproj ./
RUN dotnet restore

# Copy everything else and build
COPY . ./
RUN dotnet publish -c Release -o out

# Build runtime image
FROM microsoft/aspnetcore:2.0
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "SiliconValve.Vsts.DockerDemo.dll"]
它还需要修改.dockrignore文件

bin/
obj/
!*.dll
!obj/Docker/publish/*
!obj/Docker/empty/

这允许我继续CI过程,但是我认为有一个更容易解决问题的方法

我设法从VST内部构建服务,并将它们复制到Docker映像中。我使用.Net Core VSTS任务构建并发布到“obj/Docker/publish”文件夹,使用“Docker compose”任务构建并发布Docker容器到私有容器存储库。

在VSTS中构建并将文件从那里复制到Docker映像会更好。无法找到如何执行此操作…为什么我们需要另一个CI文件。有什么区别?为什么?我们为什么要这样做:请告诉我。