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

我试着:

ADD go /usr/local/

and:

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。


ADD go /usr/local/

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

复制go目录在/usr/local/使用:

ADD go /usr/local/go

or

COPY go /usr/local/go

ADD go /usr/local/会添加go文件夹的内容,而不是文件夹本身,你可以使用Thomasleveil解决方案,或者如果因为某些原因不工作,你可以将WORKDIR更改为/usr/local/,然后将你的目录添加到其中:

WORKDIR /usr/local/
COPY go go/

or

WORKDIR /usr/local/go
COPY go ./

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

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

和我想添加src资产包。Json只是为了好玩,所以:

在Dockerfile:

FROM galaxy:latest

WORKDIR /usr/local/
COPY . .

在.dockerignore文件中:

node_modules
headache.lock
tmp
dist

这样,就忽略了node_modules的问题。锁定TMP区域,这样它们就不会被添加!

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

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

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

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


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

COPY go /usr/local/go

参考:Docker CP参考


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

#添加XML套件文件 添加src/test/resources/xml /* /usr/share/tag/


正如官方文件所述:

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

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

COPY src ./src

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