为什么docker构建前缀为临时目录的复制路径?

时间:2017-10-27 19:48:38

标签: asp.net docker docker-compose dockerfile docker-for-windows

这是DockerFile。

FROM microsoft/aspnet:4.7
ARG source
WORKDIR /inetpub/wwwroot
COPY ${source:-obj/Docker/publish} .

这是错误。

Error
Building a.enterpriseextservices
Service 'a.enterpriseextservices' failed to build: COPY failed: 
GetFileAttributesEx \\?\C:\Users\jesmiller-AM\AppData\Local\Temp\docker-
builder587295999\obj\Docker\publish: The system cannot find the file specified..

For more troubleshooting information, go to 
http://aka.ms/DockerToolsTroubleshooting    docker-compose  C:\Program Files 
(x86)\Microsoft Visual Studio\2017\Community\MSBuild\Sdks\Microsoft.Docker.Sdk\build\Microsoft.VisualStudio.Docker.Compose.targets  349 

我已将项目发布到obj / Docker / publish文件夹。 这是我的docker-compose文件。我使用了docker-compose.yml文件所在文件夹中的docker-compose up命令。

version: '3'

services:
  a.web.familyconnection:
    image: a.web.familyconnection
    build:
      context: .\FamilyConnection
      dockerfile: Dockerfile
  b.enterpriseextservices:
    image: b.enterpriseextservices
    build:
      context: .\Framework\b.EnterpriseExtServices
      dockerfile: Dockerfile

2 个答案:

答案 0 :(得分:0)

看起来您的文件夹路径或您发布代码的位置可能不正确。该项目应发布在obj/Docker/publish

定义的相应文件夹内的context文件夹中

使用示例docker-compose.yml

version: "3"

services:
  foo:
    build: ./foo
  bar:
    build: ./bar

Dockerfile

FROM jaydorsey/ruby-2.4.1

COPY ${source:-obj/Docker/publish} .

这样的树结构:

.
├── Dockerfile
├── bar
│   └── Dockerfile
├── docker-compose.yml
├── foo
│   └── Dockerfile
└── obj
    └── Docker
        └── publish

当我运行docker-compose build时,我收到以下错误

Building foo
Step 1/2 : FROM jaydorsey/ruby-2.4.1
 ---> b79899b232f6
Step 2/2 : COPY ${source:-obj/Docker/publish} .
ERROR: Service 'foo' failed to build: COPY failed: stat /var/lib/docker/tmp/docker-builder186649811/obj/Docker/publish: no such file or directory

这与你的不一样,因为我正在运行macOS,但非常相似。你会注意到临时文件位置(它是如何复制文件的内部Docker工件)以及docker-build<randomstring>路径中的相似性

但是,如果我在每个相应的子文件夹(obj/Docker/publish)下创建context文件夹,则docker-compose build命令可以正常工作。

.
├── Dockerfile
├── bar
│   ├── Dockerfile
│   └── obj
│       └── Docker
│           └── publish
├── docker-compose.yml
├── foo
│   ├── Dockerfile
│   └── obj
│       └── Docker
│           └── publish
└── obj
    └── Docker
        └── publish

请检查您发布的文件夹是否存在于所述的上下文中,而不是在根目录中。

我仍然认为这是一个路径问题,如错误消息中所述。我希望这提供了一些帮助您调试根本原因的上下文。

您能否确认一下您的档案&amp;文件夹布局?由于错误信息,我很确定它的路径是相关的。我还没有为Windows工作任何Docker,但我也会使用正确的斜杠(向前与向后)仔细检查您的默认路径

答案 1 :(得分:0)

我有同样的问题。原来我犯了一个愚蠢的错误。我将以下内容添加到我的.dockerignore文件中,只是出于建立新项目的习惯:

bin
obj
.vs
.git

然后我尝试在Dockerfile中运行它

COPY ./bin/publish/ .

Docker给出了奇怪的tmp路径错误,因为自从我告诉它忽略我的/ bin文件夹以来,它退回到了该路径。复制到其他发布路径(而不是bin)后,问题就消失了。