Docker 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 ./ ./
 
WORKDIR /root/test_docker_proj_5
COPY ./dir* ./
 
WORKDIR /root/test_docker_proj_6
ADD ./dir* ./

通过测试可以发现 COPY/ADD 命令有这么几个规则: 1. ADD 命令和 COPY 命令在复制文件时行为一致 2. 使用 * 作为 COPY/ADD 命令的源时候表示的是 ./* 3. COPY/ADD 命令的源如果是文件夹,复制的是文件夹的内容而不是其本身 3. COPY ./* target 中的 * 会被翻译成如下的逻辑:

COPY ./sub_dir1 target
COPY ./sub_dir2 target
COPY ./file1 target
COPY ./file2 target

文件系统里的文件夹和文件,本质上都是文件,我们熟悉的操作系统的 cp 命令在执行 cp * target 时会把文件夹当成文件一股脑的复制到目标路径下,可以认为复制了文件本身,而 docker 的 COPY/ADD 在复制文件夹时复制的是其内容

参考:

https://blog.csdn.net/weixin_39628186/article/details/110607390

原文地址:https://www.cnblogs.com/sfnz/p/14744834.html