Docker COPY 并保留目录

qqi*_*ihq 6 docker dockerfile

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

COPY dir1 /opt/dir1
COPY dir2 /opt/dir2
COPY dir3 /opt/dir3
Run Code Online (Sandbox Code Playgroud)

我更愿意将它们合并为一个语句,一次性指定所有来源。但是,通过这种方式复制内容,我丢失了dir1, dir2,dir3结构:

COPY dir1 dir2 dir3 /opt/
Run Code Online (Sandbox Code Playgroud)

在这种情况下相同:

COPY dir1/ dir2/ dir3/ /opt/
Run Code Online (Sandbox Code Playgroud)

有没有办法用一条线来实现这一目标?

Von*_*onC 3

您应该考虑ADD而不是COPY:参见DockerfileADD

如果<src>是可识别的压缩格式(identity、gzip、bzip2 或 xz)的本地 tar 存档,则将其解压缩为目录。

这意味着您可以将 docker 构建步骤包装到一个脚本中,该脚本首先tar -cvf dirs.tar dir1 dir2 dir3

然后,您的 Dockerfile 可以ADD dirs.tar:您将在映像中找到您的文件夹。

另请参阅Dockerfile 最佳实践:ADDCOPY

  • @qilihq 另一种选择是让您的本地文件夹位于一个公共父文件夹中,准备好进行“复制”,复制后,通过 Dockerfile 中的“RUN mv”命令将其移动到最终位置。 (2认同)