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

我读过http://docs.docker.com/engine/reference/builder/#add,但是我遇到了一个问题。我想复制本地目录go到docker /user/local/

我试着:

ADD go /usr/local/

和:

ADD /go/ /usr/local/

另外:

RUN chmod 0755 /usr/local/go/src/make.bash

然而,我看到以下错误消息:

/usr/local/go/src/make.bash: No such file or directory

但是本地的go目录确实包含make.bash

842023 次浏览
ADD go /usr/local/

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

复制go目录到/usr/local/:

ADD go /usr/local/go

COPY go /usr/local/go

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

WORKDIR /usr/local/
COPY go go/

WORKDIR /usr/local/go
COPY go ./

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

- 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 . .

在.dockerignore文件中:

node_modules
headache.lock
tmp
dist

通过这种方式,您将忽略node_modules headache.lock tmp dist,因此它们将不会被添加!

或者为了更多的乐趣(或者你想让更多人感到困惑,让他们也受苦:P)可以是:

*
!src
!assets
!go
!justforfun
!scripts
!package.json

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

这是一个迟来的答案,但添加更多的方法来做同样的事情,涵盖了更多的情况。

你可以使用COPY。您需要显式地指定目录。它不会自己产生

COPY go /usr/local/go

参考:# EYZ0

如果您想将所有文件添加到指定位置,这将有所帮助

添加XML SUITE文件 ADD src/test/resources/xml /* /usr/share/tag/

. txt

正如官方文档的状态:

目录本身不会被复制,只复制其中的内容。

窍门是在<dest>路径中连接文件夹名,如下所示:

COPY src ./src

即使容器中还不存在。/src, COPY命令也会在内部创建它,并将src的内容复制到新文件夹(即。/src)。