如何在Dockerfile单个层中使用COPY/ADD指令复制多个文件和目录
问题原因
Docker 的 ADD/COPY 指令遵循默认规则:如果源路径为目录,只会复制目录内部的所有内容到目标路径,不会将目录本身作为整体复制到目标下,这就是你当前写法仅能拿到 dir1 内部内容的原因。
单镜像层实现方案(仅产生一个镜像层,符合需求)
最稳妥且易维护的实现方式是调整构建上下文的目录结构,将需要复制的所有内容按照镜像内的期望目录结构提前整理到同一个父目录下:
- 本地构建上下文目录结构参考:
构建上下文根目录 └── docker_assets/ ├── file.txt └── dir1/ ├── 你的目录原有内容...
- Dockerfile 中编写单条
COPY指令(推荐优先用COPY而非ADD,除非你需要自动解压远程压缩包的特殊能力):
COPY docker_assets/ /app/
执行构建后,镜像内的 /app 目录结构将完全符合预期:
/app ├── file.txt └── dir1/ └── 你的目录原有内容...
如果不想调整本地目录结构,也可以通过单条 RUN 指令配合临时复制实现,但会增加不必要的构建步骤复杂度,更推荐上述目录结构对齐的方案。
内容的提问来源于stack exchange,提问作者Abdel P.
相关产品推荐
相关产品推荐

