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

时间:2014-10-22 09:56:24

标签: docker

我已阅读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

3 个答案:

答案 0 :(得分:511)

ADD go /usr/local/

会将您本地go目录的内容复制到泊坞窗图片的/usr/local/目录中。

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

ADD go /usr/local/go

COPY go /usr/local/go

答案 1 :(得分:12)

实际上ADD go /usr/local/将添加go文件夹的内容,而不是文件夹本身,您可以使用Thomasleveil解决方案,或者如果由于某种原因而不能解决问题,则可以更改{从{1}}到WORKDIR,然后将目录添加到其中,例如:

/usr/local/

WORKDIR /usr/local/
COPY go go/

如果您要添加多个文件夹,那样添加它们会很烦人,从我当前的问题来看,目前唯一的解决方案是使用WORKDIR /usr/local/go COPY go ./ 并排除{中的所有不需要的目录和文件{1}},假设我有文件夹和文件:

COPY . .

我想添加.dockerignore以便

在Dockerfile中:

src 
tmp 
dist 
assets 
go 
justforfun 
node_modules 
scripts 
.dockerignore 
Dockerfile 
headache.lock 
package.json 

.dockerignore文件中的

src assets package.json justforfun go

或者为了获得更多乐趣(或者您想使更多的人迷惑而使他们受苦:P)可以是:

FROM galaxy:latest

WORKDIR /usr/local/
COPY . .

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

这是一个较晚的答案,但增加了更多的方法来执行相同的操作,甚至覆盖更多的情况。

答案 2 :(得分:4)

您可以使用COPY。您需要明确指定目录。它不会自己创建

>>> print u', '.join([u'Amalia Williamson', u'Celina Martin', u'Joelle Farrow'])
Amalia Williamson, Celina Martin, Joelle Farrow

参考:Docker CP reference