Docker for Windows 构建为 COPY 添加了前缀 `/var/lib/docker/tmp/`?

ca9*_*3d9 6 asp.net visual-studio docker dockerfile asp.net-core

我已经为 Windows 安装了 Docker,并使用 Visual Studio 2017 创建了一个具有 docker 支持的新 Asp.net 核心应用程序(我还没有做任何更改)。但是docker build报如下错误。Dockerfile 是否正确?

PS C:\source\repos\myProj\ProcessFiles> docker build 。
将构建上下文发送到 Docker 守护进程 1.178MB
步骤 1/17:来自 microsoft/dotnet:2.1-aspnetcore-runtime AS base
 ---> 04aae08f15c5
步骤 2/17:工作目录 /app
 ---> 使用缓存
 ---> 135955e04284
步骤 3/17:暴露 34746
 ---> 使用缓存
 ---> 85fd0075aa42
步骤 4/17:暴露 44398
 ---> 使用缓存
 ---> 7e3d5526f601
步骤 5/17:从 microsoft/dotnet:2.1-sdk AS 构建
 ---> 7c3e298d40ac
步骤 6/17:工作目录 /src
 ---> 使用缓存
 ---> b395ba27d8f9
步骤 7/17:复制 ProcessFiles/ProcessFiles.csproj ProcessFiles/
复制失败:stat /var/lib/docker/tmp/docker-builder662645761/ProcessFiles/ProcessFiles.csproj:没有这样的文件
 或目录

这是DockerfileVisual Studio 自动生成的。错误发生在线路上COPY ProcessFiles/ProcessFiles.csproj ProcessFiles/。

FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base
WORKDIR /app
EXPOSE 34746
EXPOSE 44398

FROM microsoft/dotnet:2.1-sdk AS build
WORKDIR /src
COPY ProcessFiles/ProcessFiles.csproj ProcessFiles/
RUN dotnet restore ProcessFiles/ProcessFiles.csproj
COPY . .
WORKDIR /src/ProcessFiles
RUN dotnet build ProcessFiles.csproj -c Release -o /app

FROM build AS publish
RUN dotnet publish ProcessFiles.csproj -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "ProcessFiles.dll"]
Run Code Online (Sandbox Code Playgroud)

这是 Visual Studio 输出。(关于设置 AWS 的行被排除在外)。

检查 Dockerfile 以了解如何构建项目和 docker 镜像
...跳过构建项目,因为它是作为 Dockerfile 的一部分完成的
执行 docker build
... 调用 'docker build',工作文件夹 'C:\source\repos\myProj\ProcessFiles,docker 文件 C:\source\repos\myProc\ProcessFiles\Dockerfile,图像名称 processfiles:latest'
... docker build:将构建上下文发送到 Docker 守护进程 1.178MB
... docker build: COPY failed: stat /var/lib/docker/tmp/docker-builder225959758/ProcessFiles/ProcessFiles.csproj: 没有这样的文件或目录
... docker build: 步骤 1/17 : FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base
... docker build: ---> 04aae08f15c5
... docker build:第 2/17 步:WORKDIR /app
... docker build: ---> 使用缓存
... docker build: ---> 135955e04284
... docker build:第 3/17 步:EXPOSE 34746
... docker build: ---> 使用缓存
...码头工人构建:---> 85fd0075aa42
... docker build:第 4/17 步:EXPOSE 44398
... docker build: ---> 使用缓存
... docker build: ---> 7e3d5526f601
... docker build: 步骤 5/17 : FROM microsoft/dotnet:2.1-sdk AS build
... docker build: ---> 7c3e298d40ac
... docker build: 步骤 6/17 : WORKDIR /src
... docker build: ---> 使用缓存
... docker build: ---> b395ba27d8f9
... docker build:第 7/17 步:复制 ProcessFiles/ProcessFiles.csproj ProcessFiles/
执行“docker build”时出错
尝试清理为失败的部署创建的任何 ELB 资源
将容器发布到 AWS 的未知错误

这是目录中的文件C:\source\repos\myProj。该文件Dockerfile位于C:\source\repos\myProj\ProcessFile\. 应该向上移动一级吗?

模式名称
---- ----
d----- 斌
d----- 对象
d----- 进程文件
-a---- .dockerignore
-a---- .git 属性
-a---- .gitignore
-a---- docker-compose.dcproj
-a---- docker-compose.override.yml
-a---- docker-compose.yml
-a---- myProc.sln

BMi*_*tch 4

当您运行构建命令时

docker build .
Run Code Online (Sandbox Code Playgroud)

该.命令中的 表示发送到(可能是远程)docker 引擎的“构建上下文”。所有COPY和ADD命令必须来自此目录内部(或来自多阶段构建的前一阶段)。您还可以使用该.dockerignore文件从此上下文中排除文件。tmp 目录是由该构建上下文组成的 docker 唯一生成的内部目录。

要解决您的问题,您需要确保 ProcessFiles/ProcessFiles.csproj 存在于运行构建的目录中,并且没有将其从文件的上下文中排除.dockerignore。


编辑:根据您的评论,将复制命令更改为:

COPY ProcessFiles.csproj ProcessFiles/
Run Code Online (Sandbox Code Playgroud)