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

omvjsjqw  于 2023-06-21  发布在  Docker
关注(0)|答案(6)|浏览(258)

我看了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

dojqjjoe

dojqjjoe1#

ADD go /usr/local/

会将您本地go目录的内容复制到您docker镜像的/usr/local/目录中。
要复制/usr/local/中的go目录本身,请用途:

ADD go /usr/local/go

COPY go /usr/local/go
6jjcrrmo

6jjcrrmo2#

实际上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

通过这种方式,您可以忽略所有内容,但只从“忽略列表”中排除您希望复制或添加的内容。
这是一个迟来的答案,但增加更多的方法来做同样的涵盖更多的情况。

inkz8wg9

inkz8wg93#

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

COPY go /usr/local/go

参考:Docker CP参考

pod7payv

pod7payv4#

正如官方文档所述:
不复制目录本身,只复制其内容。
诀窍是在<dest>路径中同时添加文件夹名称,如下所示:

COPY src ./src

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

mefy6pfw

mefy6pfw5#

几年后,但我有这个问题,因为我的文件夹有一个。当我把它取出来的时候,错误就消失了

klsxnrf1

klsxnrf16#

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

ADD XML SUITE文件ADD src/test/resources/xmls/* /usr/share/tag/

相关问题