Docker:COPY失败:CreateFile,在奇怪的位置查找文件

时间:2018-03-27 12:21:56

标签: docker .net-core dockerfile

尝试按照教程找到here,但遇到问题。

我从项目目录运行以下命令:

docker build -t my.solution .

我得到以下内容:

Sending build context to Docker daemon  111.6kB
Step 1/17 : FROM microsoft/aspnetcore:2.0-nanoserver-1709 AS base
 ---> ccfb41c8f5b5
Step 2/17 : WORKDIR /app
 ---> Using cache
 ---> e29a68e16001
Step 3/17 : EXPOSE 80
 ---> Using cache
 ---> 976388139964
Step 4/17 : FROM microsoft/aspnetcore-build:2.0-nanoserver-1709 AS build
 ---> d7ab4e860769
Step 5/17 : WORKDIR /src
 ---> Using cache
 ---> 4ab01220723e
Step 6/17 : COPY my.solution.sln ./
COPY failed: CreateFile \\?\C:\ProgramData\Docker\tmp\docker-builder564035917\my.solution.sln: The system cannot find the file specified.

我不知道为什么它试图在它正在寻找它的位置找到该文件。谁能帮我?我需要进行配置设置吗?我的Docker文件如下所示:

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

FROM microsoft/aspnetcore-build:2.0-nanoserver-1709 AS build
WORKDIR /src
COPY my.solution.sln ./
COPY my.solution/my.solution.csproj my.solution/
RUN dotnet restore -nowarn:msb3202,nu1503
COPY . .
WORKDIR /src/my.solution
RUN dotnet build -c Release -o /app

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

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

更新

Per @ AlexGera的回答,我尝试将docker文件更改为:

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

FROM microsoft/aspnetcore-build:2.0-nanoserver-1709 AS build
WORKDIR /src
VOLUME C:/tmp
COPY my.solution.sln c:/tmp/
COPY my.solution/my.solution.csproj my.solution/
RUN dotnet restore -nowarn:msb3202,nu1503
COPY . .
WORKDIR /src/my.solution
RUN dotnet build -c Release -o /app

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

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

但错误消息没有显着改变:

docker build -t my.solution .
Sending build context to Docker daemon  111.6kB
Step 1/18 : FROM microsoft/aspnetcore:2.0-nanoserver-1709 AS base
 ---> ccfb41c8f5b5
Step 2/18 : WORKDIR /app
 ---> Using cache
 ---> e29a68e16001
Step 3/18 : EXPOSE 80
 ---> Using cache
 ---> 976388139964
Step 4/18 : FROM microsoft/aspnetcore-build:2.0-nanoserver-1709 AS build
 ---> d7ab4e860769
Step 5/18 : WORKDIR /src
Removing intermediate container 31e30e2346aa
 ---> 61c7df20f3c4
Step 6/18 : VOLUME C:/tmp
 ---> Running in fada6c728151
Removing intermediate container fada6c728151
 ---> 7a650440cc1f
Step 7/18 : COPY my.solution.sln c:/tmp/
COPY failed: CreateFile \\?\C:\ProgramData\Docker\tmp\docker-builder832533802\my.solution.sln: The system cannot find the file specified.

9 个答案:

答案 0 :(得分:13)

在我看来,新解决方案随附的标准Dockerfile出现了错误:/

我将Dockerfile从PowerShell移至解决方案文件夹:

mv Dockerfile ../Dockerfile

从那里运行docker build命令对我来说有用...

答案 1 :(得分:2)

如果指定了阶段,COPY命令将从构建上下文或先前的构建阶段复制文件。使用您的构建命令:

docker build -t my.solution .

上下文为.,首先发送到docker引擎,该引擎将其放置在仅用于构建的临时位置。

因此请使用复制命令:

Step 6/17 : COPY my.solution.sln ./

文件my.solution.sln需要存在于运行build命令的文件夹中。

对于目的地,文件将被复制到容器内的工作目录,或者示例中为/src

答案 2 :(得分:1)

我在VS2017解决方案中发现了相同的情况,其中构建是由docker compose启动的,而yml文件是项目上方的一个目录。

如果您想直接使用docker文件构建docker文件,则需要将docker文件移动到上下文的一个级别

答案 3 :(得分:0)

复制之前在图像中添加卷以复制到哪里。 像这样:

VOLUME C:/Users/mysolution
COPY my.solution.sln C:/Users/mysolution

尽量不要在目录名称中使用点。

答案 4 :(得分:0)

这可能是由DockerFile旁边的.dockerignore文件引起的,它忽略了/ obj / *之外的所有内容。 将其复制到另一个文件夹后,您无需再复制.dockerignore文件,因此不会排除任何内容,并且可以正常工作。

答案 5 :(得分:0)

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

答案 6 :(得分:0)

完全适合谁使用Visual Studio:

运行此命令:

docker build -t . your_application_name/Dockerfile

Dockerfile复制路径:

["your_application_name/your_application_name.csproj","your_application_name/"]

我们运行build命令docker build命令,无法在项目路径位置找到dockerfile。

答案 7 :(得分:0)

Visual Studio在项目级别创建Docker文件,但是,该Dockerfile被定制为从更高级别(解决方案级别)运行。

enter image description here

解决此问题的最简单方法是上一层(Solution文件夹),然后指定项目文件夹:

<webUser>user_email/webUser>
<webPassword>jira_token</webPassword>

答案 8 :(得分:-1)

使用\\

  

FROM microsoft\\aspnetcore-build:2.0-nanoserver-1709 AS build

请参阅以下示例

FROM microsoft/aspnetcore:2
WORKDIR /app
EXPOSE 80

COPY bin\\Debug\\netcoreapp2.0 .

ENTRYPOINT ["dotnet","DOCKER-API.dll"]