Docker 使用ADD命令将目录复制到另一个目录

Docker 使用ADD命令将目录复制到另一个目录,docker,Docker,我读过,但是我遇到了一个问题。我想将本地目录go复制到docker/user/local/ 我试过: ADD go /usr/local/ 以及: 此外: 但是,我看到以下错误消息: /usr/local/go/src/make.bash: No such file or directory 但是本地go目录确实包含make.bash ADD go /usr/local/ 将复制docker映像的/usr/local/目录中本地go目录的内容 要在/usr/local/中复制go目录本身,

我读过,但是我遇到了一个问题。我想将本地目录
go
复制到docker
/user/local/

我试过:

ADD go /usr/local/
以及:

此外:

但是,我看到以下错误消息:

/usr/local/go/src/make.bash: No such file or directory
但是本地
go
目录确实包含
make.bash

ADD go /usr/local/
将复制docker映像的
/usr/local/
目录中本地
go
目录的内容

要在
/usr/local/
中复制
go
目录本身,请使用:

ADD go /usr/local/go


实际上,
ADD go/usr/local/
将添加
go
文件夹的内容,而不是文件夹本身,您可以使用Thomaslevel解决方案,或者如果由于某种原因无法使用,您可以将
WORKDIR
更改为
/usr/local/
,然后将您的目录添加到其中,如:

WORKDIR /usr/local/
COPY go go/

但是,如果您想添加多个文件夹,那么这样添加它们会很烦人,目前唯一的解决方案是使用
COPY
并排除
.dockrignore
中所有不需要的目录和文件,假设我得到了文件夹和文件:

- src 
- tmp 
- dist 
- assets 
- go 
- justforfun 
- node_modules 
- scripts 
- .dockerignore 
- Dockerfile 
- headache.lock 
- package.json 
我想添加
src assets package.json justforfun go

在Dockerfile中:

FROM galaxy:latest

WORKDIR /usr/local/
COPY . .
在.dockrignore文件中:

node_modules
headache.lock
tmp
dist
或者为了获得更多乐趣(或者你喜欢迷惑更多的人,让他们也受苦:p)可以:

通过这种方式,您可以忽略所有内容,但只从“忽略列表”中排除要复制或添加的内容


这是一个迟来的答案,但增加了更多的方法来解决更多的问题。

您可以使用COPY。您需要显式地指定目录。它不会被自己创造出来

COPY go /usr/local/go

引用:

我正在尝试使用ADD的多源版本,因此无法为目标指定目标目录名。有没有一种方法可以实现OP在多src格式中要求的操作(即不为每个源目录创建
添加
层)?我只想补充一点,说明
$HOME
~
或任何其他shell变量都不起作用。我之所以这么说,是因为我花了大量的时间试图弄明白这一点,尽管这对大多数人来说都是显而易见的。COPY go/usr/local/go不适合我。不抄袭。这真是一件令人困惑的事。为什么
COPY
不能像
cp
那样简单地操作呢?相反,它的工作原理需要额外的警力。dockerignore文件可以隐藏目录,而复制或添加对列出的项目不起作用
- src 
- tmp 
- dist 
- assets 
- go 
- justforfun 
- node_modules 
- scripts 
- .dockerignore 
- Dockerfile 
- headache.lock 
- package.json 
FROM galaxy:latest

WORKDIR /usr/local/
COPY . .
node_modules
headache.lock
tmp
dist
*
!src 
!assets 
!go 
!justforfun 
!scripts 
!package.json 
COPY go /usr/local/go