Docker 用一个命令复制多个目录

Docker 用一个命令复制多个目录,docker,copy,dockerfile,Docker,Copy,Dockerfile,有没有办法在一个命令中复制多个目录,以减少层数?例如,代替: COPY dirone ./dirone COPY dirtwo ./dirtwo COPY dirthree ./dirthree 我想做: COPY dirone/ dirtwo/ dirthree/ ./ 但是,这会复制目录的内容。。。但是我想复制目录本身。这是copy命令的记录行为: 如果是一个目录,则复制该目录的全部内容,包括文件系统元数据 注意:目录本身没有被复制,只是它的内容 我能建议的最佳解决方法是更改生成文件夹中

有没有办法在一个命令中复制多个目录,以减少层数?例如,代替:

COPY dirone ./dirone
COPY dirtwo ./dirtwo
COPY dirthree ./dirthree
我想做:

COPY dirone/ dirtwo/ dirthree/ ./

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

这是copy命令的记录行为:

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

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

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

As,这是预期的复制行为

另一种选择是使用柏油球

创建初始tarball

tar -cvf dirs.tar dirone/ dirtwo/ dirthree/
将其添加到构建中

FROM busybox
ADD dirs.tar /
CMD find /dirone /dirtwo /dirthree
tarball将自动提取

○ →docker run c28f96eadd58
/dirone
/dirone/one
/dirtwo
/dirtwo/two
/dirthree
/dirthree/three
注意每次更新tar文件时,都会使该步骤的Docker build缓存失效。如果您正在处理大量的文件,那么在执行
tar-c
时,您可能需要对这些文件保持明智。如果您可以处理未从tarball中自动删除的文件,也可以使用
tar-u

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

实际的解决方案,它不会更改您的代码,只使用dockerfile

COPY . /tmp/
WORKDIR /tmp/
RUN cp -r dirone/ dirtwo/ dirthree/ /full_path_to_app/
WORKDIR /full_path_to_app/
请注意:

  • 在/tmp之后,您需要将workdir更改回一些有用的内容
  • 您可以在不使用workdir的情况下执行此操作,但随后需要重复路径
    运行cp-r/tmp/dirone//tmp/dirtwo//tmp/dirthree/
  • 目标路径必须是绝对路径,否则将与workdir相关
  • 目的地应以
    /

几个小时以来,我一直在绞尽脑汁,想知道为什么我的容器中丢失了某些文件。原来这就是原因。为什么,为什么,复制不能像cp一样工作?请回答一个问题,我假设如果必要的话,可以创建几个tar来优化它的应用程序?例如,tarOne用于某些文件,tarTwo用于其他文件,允许减少每个tar的大小和rebuilding@Webwoman是的,那会有用的。一般的规则是把变化最小的东西放在dockerfile的第一位。对于tar文件也可以这样做,如果您有一大组不变的文件,请将它们分开