Docker复制并保留目录

8

我需要在Dockerfile中复制多个目录。目前,我的做法是:

COPY dir1 /opt/dir1
COPY dir2 /opt/dir2
COPY dir3 /opt/dir3

我更倾向于将它们合并成一个语句,一次性指定所有的源。然而,这样会复制内容,并且我会失去dir1dir2dir3结构:

COPY dir1 dir2 dir3 /opt/

在这种情况下也是如此:

COPY dir1/ dir2/ dir3/ /opt/

有没有一种方法可以用一行代码实现这个功能?

复制多个目录的单个命令和如何在Dockerfile中使用单个层复制多个文件的问题已经在StackOverflow中有了解答。 - Tarun Lalwani
@TarunLalwani 第二个链接不是一个副本。在docerfile复制中,文件和文件夹之间有一个可怕的差异。 - bm13kk
1个回答

3
你应该考虑使用ADD而不是COPY:参见Dockerfile ADD

如果<src>是本地tar归档文件, 识别的压缩格式为(identity, gzip, bzip2或xz),则它将被解包成一个目录.

那意味着您可以将docker构建步骤包装到脚本中,该脚本首先会运行tar -cvf dirs.tar dir1 dir2 dir3 然后您的Dockerfile可以ADD dirs.tar:您会在您的映像中找到您的文件夹。
另请参见Dockerfile 最佳实践:ADDCOPY

1
诚然,我本来希望有更简单的东西,但是:这个想法很有趣,谢谢! - qqilihq
2
@qqilihq 另一个选择是将您的本地文件夹放在一个共同的父文件夹中,准备好进行 COPY,一旦复制完成,再通过 Dockerfile 中的 RUN mv 命令将它们移动到最终位置。 - VonC
@VonC,从所有角度来看,这个解决方案更好。 - bm13kk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接