2016-06-09 37 views
12

有没有办法在一个命令中复制多个目录,以减少层数?例如,而不是:使用一个命令复制多个目录

COPY dirone ./dirone 
COPY dirtwo ./dirtwo 
COPY dirthree ./dirthree 

我想做的事:

COPY dirone/ dirtwo/ dirthree/ ./ 

然而,此份内容的目录 ...但我想复制目录本身

回答

9

这是复制命令的记录的行为:

如果<src>是一个目录,目录中的全部内容被复制,包括文件系统元数据。

注意:目录本身不会被复制,只是它的内容。

我可以建议的最佳解决方法是在生成文件夹中更改目录布局,将三个文件夹移动到一个父文件夹下并添加父文件夹。

6

由于BMitch answered,这是预期的COPY行为。

替代方案是ADD tarball的内容。

创建初始的压缩包

tar -cvf dirs.tar dirone/ dirtwo/ dirthree/ 

将它添加到构建

FROM busybox 
ADD dirs.tar/
CMD find /dirone /dirtwo /dirthree 

的压缩包会自动提取

○ →docker run c28f96eadd58 
/dirone 
/dirone/one 
/dirtwo 
/dirtwo/two 
/dirthree 
/dirthree/three 

注意你每次更新tar文件您正在使Docker构建缓存无效那一步。如果您正在处理大量的文件,您可能需要在执行tar -c时做出明智的决定。如果您可以处理未从tarball中自动删除的文件,也可以使用tar -u

[ -f dirs.tar ] && tar -uf dirs.tar something || tar -cf dirs.tar something 
相关问题