dockerfile 中的 copy 和 add

概述

在 Dockerfile 中,COPY 和 ADD 都是用于将文件/目录从构建上下文(build context)复制到镜像中的指令,但它们在功能上有关键区别:

特性 COPY ADD
基本功能 仅支持本地文件/目录复制 额外支持 URL 下载自动解压压缩包
推荐使用场景 大多数情况(更透明、可预测) 需要下载或解压的场景
行为复杂度 简单直接 隐含行为较多(解压可能造成意外效果)

对比

COPY

只能复制本地文件/目录到镜像:

COPY ./app.py /app/  # 复制本地文件到镜像

ADD

除了支持本地复制,还额外支持解压(仅限本地文件):

ADD dataset.tar.gz /data/  # 复制并自动解压到 /data

然而,对于URL的文件,只下载,不解压:

ADD https://example.com/data.zip /tmp/  # 下载文件(不解压!)

如果需要下载并解压,建议使用RUN命令组合:

RUN curl -o /tmp/data.zip https://example.com/data.zip \
    && unzip /tmp/data.zip \
    && rm /tmp/data.zip  # 显式控制更安全

总结

核心原则: 绝大多数情况下都尽量使用 COPY

留下评论

您的邮箱地址不会被公开。 必填项已用 * 标注