【问题标题】:vs 2017 COPY failed: Docker File, CreateFile The system cannot find the file specifiedvs 2017 COPY failed: Docker File, CreateFile 系统找不到指定的文件
【发布时间】:2018-09-23 00:27:21
【问题描述】:

复制失败: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"]

【问题讨论】:

  • 从 cmd 构建 docker 时出现这些错误。从 vs 2017 创建的项目。
  • 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恢复 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 。入口点 ["dotnet", "WebApplication1.dll"]

标签: docker visual-studio-2017


【解决方案1】:

目录结构有问题。

  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】:

    在 Visual Stundio 2019 中,我发现了有趣的问题\情况。当您尝试创建 VS 自动生成的 dockerfile 时,生成的 Dockerfile 放在主项目中,不在 root(.sln) 文件夹中,其中存在 .dockerignore。

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

    <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 (web 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 文件的位置),我的问题得到了解决。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 是的,没错...我删除了 dockerignore 和复制的工作
      【解决方案4】:

      适用于 vs2017

      docker build -t 示例应用程序。 -f 示例应用程序/dockerfile

      正常构建失败是因为找不到docker文件所在位置的准确路径。所以可以观察dockerfile.yml COPY命令

      ["sampleapplication/sampleapplication.csproj","sampleapplication/"]

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

      ["./sampleapplication.csproj","sampleapplication/"]

      运行 dotnet restore "./sampleapplication.csproj"

      【讨论】:

        【解决方案5】:

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

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

        .dockerignore 更新为:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-07-30
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多