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 ./ ./<