用一个命令复制多个目录

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

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

我想要做:

 COPY dirone/ dirtwo/ dirthree/ ./ 

但是,这复制目录的内容 …但我想复制目录本身

这是copy命令的logging行为:

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

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

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

正如BMitch回答的那样 ,预计COPY的行为。

另一种方法是ADD tarball的内容。

创build最初的tarball

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

将其添加到构build

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

压缩包会自动提取

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

请注意 ,每次更新tar文件时,都会使该步骤的Docker构buildcaching失效。 如果你正在处理大量的文件,你可能想要在做tar -c时候很聪明。 你也可以使用tar -u如果你可以处理不被自动从tarball中删除的文件。

 [ -f dirs.tar ] && tar -uf dirs.tar something || tar -cf dirs.tar something