vs 2017 COPY失败:Docker文件,CreateFile系统找不到指定的文件

时间:2018-04-12 18:22:31

标签: docker visual-studio-2017

  

COPY失败:CreateFile \?\ C:\ ProgramData \ Docker \ tmp \ docker-builder056926419 \ WebApplication1.sln:系统找不到指定的文件。

示例文件:

FROM microsoft/aspnetcore:2.0 AS base
WORKDIR /app
EXPOSE 80

FROM microsoft/aspnetcore-build:2.0 AS builder
WORKDIR /src
COPY WebApplication1.sln ./
COPY WebApplication1/WebApplication1.csproj Web/
RUN dotnet restore
COPY . .
WORKDIR /src/Web
RUN dotnet build -c Release -o /app


FROM builder AS publish
RUN dotnet publish -c Release -o /app

FROM base AS production
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "WebApplication1.dll"]

5 个答案:

答案 0 :(得分:1)

在Visual Stundio 2019中,我发现了一个有趣的问题\情境。当您尝试创建由VS自动生成的dockerfile时,生成的 Dockerfile 放置在主项目中,不在根(.sln)文件夹中,其中存在 .dockerignore < / strong>。

我的项目有下一个文件夹结构:

<DIR>          .
<DIR>          ..
            82 .dockerignore
         6 305 .gitignore
<DIR>          MyProject.API
<DIR>          MyProject.API.Client
<DIR>          MyProject.Model
<DIR>          MyProject.Repository
<DIR>          MyProject.Repository.Settings
         6 567 MyProject.sln
         4 899 README.md
<DIR>          Tests.MyProject.Repository
<DIR>          Tests.Model
<DIR>          Tests.MongoContext.Infrastructure
<DIR>          Tests.MongoQuery
<DIR>          Tests.OdataFilters

主项目是 MyProject.API 中的MyProject.API.csproj(网络api)。

VS自动生成的dockerfile具有以下结构:

FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

#VS generate copy command explicitly for dependencies of main project (model, repository, settings, etc.)
FROM microsoft/dotnet:2.2-sdk AS build
WORKDIR /src
COPY ["MyProject.API/MyProject.API.csproj", "MyProject.API/"]
COPY ["MyProject.Model/MyProject.Model.csproj", "MyProject.Model/"]
COPY ["MyProject.Repository/MyProject.Repository.csproj", "MyProject.Repository/"]
COPY ["MyProject.Repository.Settings/MyProject.Repository.Settings.csproj", "MyProject.Repository.Settings/"]
RUN dotnet restore "MyProject.API/MyProject.API.csproj"
COPY . .
WORKDIR "/src/MyProject.API"
RUN dotnet build "MyProject.API.csproj" -c Release -o /app

FROM build AS publish
RUN dotnet publish "MyProject.API.csproj" -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "MyProject.API.dll"]

当我尝试构建映像according to insturction from Docker时,我遇到了问题:

Linux容器类型:

Step 7/20 : COPY ["MyProject.API/MyProject.API.csproj", "MyProject.API/"]
COPY failed: stat /var/lib/docker/tmp/docker-builder799586484/MyProject.API/MyProject.API.csproj: no such file or directory

Windows容器类型:

Step 7/20 : COPY ["MyProject.API/MyProject.API.csproj", "MyProject.API/"]
COPY failed: CreateFile \\?\C:\ProgramData\Docker\tmp\docker-builder753862033\MyProject.API\MyProject.API.csproj: The system cannot find the path specified.

根据this answer,我将Dockerfile移至根文件夹(存在.sln和.dockerignore文件的位置),并且问题得到解决。

答案 1 :(得分:0)

目录结构有问题。

  1. 将dockerfile移动到bin / Release / PublishOutput(运行VS publish>文件系统后)
  2. 将所有文件移至站点文件夹
  3. 运行docker build

https://forums.docker.com/t/copy-failed-trying-to-install-plain-asp-net-mvc-app-to-a-container/57217/3

我不确定如何使它在VS中自动工作。

答案 2 :(得分:0)

如果您有此问题,尤其是在使用Visual Studio时,我有98%的把握是由.dockerignore文件中缺少异常引起的。 您需要将文件/目录添加到.dockerignore中的异常

答案 3 :(得分:0)

对于vs2017

docker build -t sampleapplication。 -f sampleapplication / dockerfile

正常构建失败,因为它无法找到docker文件位置的确切路径。因此您可以观察dockerfile.yml COPY命令

[“ sampleapplication / sampleapplication.csproj”,“ sampleapplication /”]

我们还有一个简单的技巧,即那些使用vs .docker文件的人可以通过更改停靠文件中的copy命令来构建

[“ ../ sampleapplication.csproj”,“ sampleapplication /”]

运行dotnet还原“ ./sampleapplication.csproj”

答案 4 :(得分:0)

这可能是由DockerFile旁边的.dockerignore文件引起的,它忽略了/obj/Docker/以外的所有内容:

*
!obj\Docker\publish\*
!obj\Docker\empty\

.dockerignore更新为:

Dockerfile
[b|B]in
[O|o]bj