Docker COPY 复制文件夹的诡异行为

本文探讨了在Dockerfile中使用COPY命令时遇到的问题,即当尝试复制一个文件夹及其内容时,第一层文件夹被解包,只复制了其内部的文件和子文件夹。作者通过一系列测试总结了COPY/ADD命令的行为规则:1) * 代表 ./*;2) 文件夹被复制的是其内容而非本身。这一特性在某些场景下可能造成困扰,因为与传统cp命令的行为不同。目前Docker尚未对此进行修改,开发者在编写Dockerfile时需要注意此行为。
摘要由CSDN通过智能技术生成

https://www.jianshu.com/p/9b7da9aacd8a

问题现象
在制作 docker 镜像时,有复制某一个路径下所有文件和文件夹到镜像的需求,写下了如下 dockerfile:

FROM alpine
WORKDIR /root/test_docker_proj
COPY * ./
原始目录结构是这样的:

/projects/test_docker_proj
├── Dockerfile
├── dir1
│ ├── dir11
│ │ └── file11
│ └── file1
└── file2
然而复制到 docker 镜像里的目录结构变成了这样:

/root/test_docker_proj
├── Dockerfile
├── dir11
│ └── file11
├── file1
└── file2
可以看到 dir1 这个文件夹并没有被复制到镜像里,但是 dir1 中的子文件夹和文件都被复制进来了,和 dir1 同级的文件也被复制了。也就是说,在 COPY 执行的过程中,第一层文件夹被「解包」了。

COPY/ADD 行为逻辑
为了确定 COPY 和相似的 ADD 命令的行为,做了以下测试:

FROM alpine

WORKDIR /root/test_docker_proj_1
COPY * ./

WORKDIR /root/test_docker_proj_2
ADD * ./

WORKDIR /root/test_docker_proj_3
COPY ./ ./

WORKDIR /root/test_docker_proj_4
ADD ./ ./<

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值