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相关
- 目的地应以
/