有没有办法在一个命令中复制多个目录,以减少层数?例如,而不是:使用一个命令复制多个目录
COPY dirone ./dirone
COPY dirtwo ./dirtwo
COPY dirthree ./dirthree
我想做的事:
COPY dirone/ dirtwo/ dirthree/ ./
然而,此份内容的目录 ...但我想复制目录本身。
有没有办法在一个命令中复制多个目录,以减少层数?例如,而不是:使用一个命令复制多个目录
COPY dirone ./dirone
COPY dirtwo ./dirtwo
COPY dirthree ./dirthree
我想做的事:
COPY dirone/ dirtwo/ dirthree/ ./
然而,此份内容的目录 ...但我想复制目录本身。
这是复制命令的记录的行为:
如果
<src>
是一个目录,目录中的全部内容被复制,包括文件系统元数据。注意:目录本身不会被复制,只是它的内容。
我可以建议的最佳解决方法是在生成文件夹中更改目录布局,将三个文件夹移动到一个父文件夹下并添加父文件夹。
由于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