docker - ASP.NET 4.7.2 - Docker - 复制失败:CreateFile + 系统找不到指定的文件
问题描述
我使用 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} .
我尝试使用build
Azure DevOps 中 Docker 任务中的命令构建 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 映像。我正在尝试学习如何将 Docker 与 Azure DevOps 一起使用。
谢谢
解决方案
复制 ${source:-obj/Docker/publish} 。
首先,我们需要知道这个脚本行是什么意思。它表达的是:
嗨 Docker,这里有一个请求。请将COPY
您从路径中找到的文件$source
放入图像的当前目录.
中。如果里面什么都没有$source
或者不存在,就走默认路径obj/Docker/publish
并使用它。
总之,这个脚本试图从 obj/Docker/publish 复制您编译的 .NET 应用程序位
脚本格式可以参考本指南。
用一句话来表示上面的编译过程,就是试图从 obj/Docker/publish 复制编译好的 ASP.NET 应用程序。
因此,在 Azure Devops 中,您需要在构建映像之前添加一个构建任务来构建解决方案。然后使用 Copy file 任务将构建文件复制到 docker 映像中。否则,该${source:-obj/Docker/publish}
文件夹将不会显示。
由于你的项目是一个 ASP.NET 项目,你可以按照这个文档和这个博客来实现你的项目构建。
另外,你可以参考这个线程。
两个答案中提供的解决方案都是正确的,只是方向不一样。第一个解决方案是修改dockerfile
以使其适用于 Azure devops,而无需任何解决方案构建。而在第二个答案中,它是使用我上面提到的 Azure Devops 中的任务,来实现项目可以docker build
使用默认的dockerfile
.
推荐阅读
- android - (取消)在 Android 服务中注册传感器侦听器并不总是有效
- r - 将 geom_vline 扩展到绘图之外
- ansible - 循环遍历 Ansible playbook 上的 var 文件,然后依次运行 playbook 中的所有角色
- php - 使用 Apache 2.4 在 CentOS 8 中配置 PHP-FPM 服务
- django - 文件系统目录路径的 Django 模型字段
- java - 如何在此程序中更改 JFrame 的背景颜色?
- javascript - 如何正确编写可以单独工作的 jQuery 切换按钮?
- javascript - 如何移动组件或创建它的副本
- django - 如何在 DetailView 中根据数据库验证和比较数据 - Django
- r - 试图计算一个大整数的 R 过低