ASP.NET 4.7.2-Docker-复制失败:CreateFile+;系统找不到指定的文件

ASP.NET 4.7.2-Docker-复制失败:CreateFile+;系统找不到指定的文件,docker,azure-devops,Docker,Azure Devops,我已经使用Visual Studio 2019创建了一个全新的ASP.NET 4.7.2 MVC Web应用程序。在Visual Studio 2019中初始化解决方案时,我选中了Docker support复选框。这在我的项目中添加了一个名为Dockerfile的文件,如下所示: FROM mcr.microsoft.com/dotnet/framework/aspnet:4.8-windowsservercore-ltsc2019 ARG source WORKDIR /inetput/ww

我已经使用Visual Studio 2019创建了一个全新的ASP.NET 4.7.2 MVC Web应用程序。在Visual Studio 2019中初始化解决方案时,我选中了
Docker support
复选框。这在我的项目中添加了一个名为
Dockerfile
的文件,如下所示:

FROM mcr.microsoft.com/dotnet/framework/aspnet:4.8-windowsservercore-ltsc2019
ARG source
WORKDIR /inetput/wwwroot
COPY ${source:-obj/Docker/publish} .
我尝试从Azure DevOps中的Docker任务中使用
build
命令构建Docker映像。当我这样做时,我得到以下信息:

Step 1/13 : FROM mcr.microsoft.com/dotnet/framework/aspnet:4.8-windowsservercore-ltsc2019
  ---> [id1]
Step 2/13 : ARG source
  ---> Running in [id2]
Removing immediate container [id2]
  ---> [id3]
Step 3/13 : WORKDIR / inetpub/wwwroot
  ---> Running in [id4]
Removing immediate container [id4]
COPY failed: CreateFile \\?\C:\ProgramData\docker\tmp\docker-build-[id5]\obj\Docker\publish: The system cannot find the path specified.
  ---> [id6]
STEP 4/13 : COPY ${source:-obj/Docker/publish} .
怎么了?为什么复制失败了?显然,这是因为它“找不到文件”。但是,我不确定它应该在哪里。我没有更改Dockerfile。我只是尝试从Azure DevOps中的“Hello World”ASP.NET 4.7.2 web应用程序构建Docker映像。我正在尝试学习如何在Azure DevOps中使用Docker

多谢各位

复制${source:-obj/Docker/publish}

首先,我们需要知道这个脚本行是什么意思。它所表达的是:

你好,Docker,这里有个请求。请将从路径
$source
找到的文件
复制到图像的当前目录
。如果
$source
中没有任何内容或它不存在,只需转到默认路径
obj/Docker/publish
并使用它

一句话,这个脚本试图从obj/Docker/publish复制编译后的.NET应用程序位

对于脚本格式,您可以参考以下内容


用一句话表示上述编译过程,它试图从obj/Docker/publish复制已编译的ASP.NET应用程序

因此,在Azure Devops中,您需要在构建映像之前向构建解决方案添加一个构建任务。然后使用“复制文件”任务将生成文件复制到docker映像中。否则,
${source:-obj/Docker/publish}
文件夹将不会显示

由于您的项目是一个ASP.NET项目,您可以按照此和此来实现您的项目构建


另外,你可以参考这个

两个答案中提供的解决方案都是正确的,只是方向不同。第一个解决方案是修改
dockerfile
,使其适合Azure devops,而无需任何解决方案构建。在第二个答案中,它使用了我在Azure Devops中提到的任务,以实现项目可以通过使用默认的
dockerfile
使用
dockerbuild
执行