Dockerfile拷贝保持子目录结构

新手上路,请多包涵

我正在尝试将许多文件和文件夹从我的本地主机复制到 docker 映像构建中。

文件是这样的:

 folder1/
    file1
    file2
folder2/
    file1
    file2

我正在尝试制作这样的副本:

 COPY files/* /files/

但是,来自 folder1/folder2/ 的所有文件都直接放在 /files/ 中,没有它们的文件夹:

 files/
    file1
    file2

Docker中有没有办法保留子目录结构以及将文件复制到它们的目录中?像这样:

 files/
    folder1/
        file1
        file2
    folder2/
        file1
        file2

原文由 user1220022 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.8k
2 个回答

使用此 Dockerfile 从 COPY 中删除星号:

 FROM ubuntu
COPY files/ /files/
RUN ls -la /files/*

结构在那里:

 $ docker build .
Sending build context to Docker daemon 5.632 kB
Sending build context to Docker daemon
Step 0 : FROM ubuntu
 ---> d0955f21bf24
Step 1 : COPY files/ /files/
 ---> 5cc4ae8708a6
Removing intermediate container c6f7f7ec8ccf
Step 2 : RUN ls -la /files/*
 ---> Running in 08ab9a1e042f
/files/folder1:
total 8
drwxr-xr-x 2 root root 4096 May 13 16:04 .
drwxr-xr-x 4 root root 4096 May 13 16:05 ..
-rw-r--r-- 1 root root    0 May 13 16:04 file1
-rw-r--r-- 1 root root    0 May 13 16:04 file2

/files/folder2:
total 8
drwxr-xr-x 2 root root 4096 May 13 16:04 .
drwxr-xr-x 4 root root 4096 May 13 16:05 ..
-rw-r--r-- 1 root root    0 May 13 16:04 file1
-rw-r--r-- 1 root root    0 May 13 16:04 file2
 ---> 03ff0a5d0e4b
Removing intermediate container 08ab9a1e042f
Successfully built 03ff0a5d0e4b

原文由 ISanych 发布,翻译遵循 CC BY-SA 4.0 许可协议

或者,您可以使用“。”而不是 *,因为这将获取工作目录中的所有文件,包括文件夹和子文件夹:

 FROM ubuntu
COPY . /
RUN ls -la /

原文由 Sparkz0629 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题