0

0

Dockerfile中ADD指令与COPY指令核心区别深度剖析

冷漠man

冷漠man

发布时间:2026-03-17 08:18:00

|

449人浏览过

|

来源于php中文网

原创

优先使用COPY而非ADD;COPY仅原样复制文件,行为稳定可预测,支持多阶段构建和权限控制,而ADD会自动解压本地压缩包并支持URL下载,但易导致不可重现构建和意外覆盖。

dockerfile中add指令与copy指令核心区别深度剖析

COPY只做复制,ADD额外带“魔法”

COPY 的作用非常明确:把构建上下文里的文件或目录原封不动地复制进镜像,不做任何解释、不下载、不解压。它就像一个老实的搬运工,指哪搬哪。

ADD 表面看也是搬运,但暗藏两个特殊能力:一是遇到本地 .tar.tar.gz.tar.xz 等格式压缩包时,会自动解压到目标路径;二是支持直接写 URL,比如 ADD https://example.com/app.zip /tmp/,会先下载再存入镜像(但不会解压)。

行为可预测性差异明显

COPY 的行为稳定、透明,每次构建效果一致,适合长期维护和团队协作。只要源文件没变,缓存就复用,构建快且可靠。

ADD 则容易“出其不意”:

  • 如果误把 data.tar.gz 用 ADD 复制到已有内容的目录,它会自动解压并覆盖同名文件,可能破坏原有结构
  • 用 URL 下载时,构建过程依赖网络,失败即中断,还可能因远程文件变更导致镜像不可重现
  • 自动解压逻辑只对本地压缩包生效,URL 文件不触发解压——这种不一致也增加了理解成本

官方推荐与真实适用场景

Docker 官方文档明确建议:99% 的情况优先用 COPY。它的语义清晰、功能专注,是构建可维护 Dockerfile 的基石。

ADD 的合理使用场景其实非常有限:

NameGPT名称生成器
NameGPT名称生成器

免费AI公司名称生成器,AI在线生成企业名称,注册公司名称起名大全。

下载
  • 需要快速解压一个官方提供的 rootfs 压缩包(如 ADD ubuntu-minimal-cloudimg-amd64-root.tar.gz /
  • 迁移老旧项目,且无法修改已有 ADD 逻辑
  • 极少数 CI 场景中需临时拉取固定版本的二进制包(但仍建议改用 RUN + curl/wget 更可控)

多阶段构建与高级选项实践

在现代 Docker 工作流中,COPY 的优势进一步放大:

  • 支持 --from=builder 跨阶段复制,这是多阶段构建传递产物的标准方式,ADD 不支持
  • COPY 支持 --chown--chmod(17.09+,启用 BuildKit 后),能精细控制权限,避免容器内权限问题
  • 若真要解压,更推荐显式拆解:先 COPY 压缩包,再 RUN tar 解压并清理,逻辑清晰、便于调试

例如:

COPY app.tar.gz /tmp/<br>RUN tar -xzf /tmp/app.tar.gz -C /app && rm /tmp/app.tar.gz

这比一行 ADD 更安全、更易审计、也更容易加日志或校验步骤。

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
curl_exec
curl_exec

curl_exec函数是PHP cURL函数列表中的一种,它的功能是执行一个cURL会话。给大家总结了一下php curl_exec函数的一些用法实例,这个函数应该在初始化一个cURL会话并且全部的选项都被设置后被调用。他的返回值成功时返回TRUE, 或者在失败时返回FALSE。

455

2023.06.14

linux常见下载安装工具
linux常见下载安装工具

linux常见下载安装工具有APT、YUM、DNF、Snapcraft、Flatpak、AppImage、Wget、Curl等。想了解更多linux常见下载安装工具相关内容,可以阅读本专题下面的文章。

183

2023.10.30

curl_exec
curl_exec

curl_exec函数是PHP cURL函数列表中的一种,它的功能是执行一个cURL会话。给大家总结了一下php curl_exec函数的一些用法实例,这个函数应该在初始化一个cURL会话并且全部的选项都被设置后被调用。他的返回值成功时返回TRUE, 或者在失败时返回FALSE。

455

2023.06.14

linux常见下载安装工具
linux常见下载安装工具

linux常见下载安装工具有APT、YUM、DNF、Snapcraft、Flatpak、AppImage、Wget、Curl等。想了解更多linux常见下载安装工具相关内容,可以阅读本专题下面的文章。

183

2023.10.30

k8s和docker区别
k8s和docker区别

k8s和docker区别有抽象层次不同、管理范围不同、功能不同、应用程序生命周期管理不同、缩放能力不同、高可用性等等区别。本专题为大家提供k8s和docker区别相关的各种文章、以及下载和课程。

280

2023.07.24

docker进入容器的方法有哪些
docker进入容器的方法有哪些

docker进入容器的方法:1. Docker exec;2. Docker attach;3. Docker run --interactive --tty;4. Docker ps -a;5. 使用 Docker Compose。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

517

2024.04.08

docker容器无法访问外部网络怎么办
docker容器无法访问外部网络怎么办

docker 容器无法访问外部网络的原因和解决方法:配置 nat 端口映射以将容器端口映射到主机端口。根据主机兼容性选择正确的网络驱动(如 host 或 overlay)。允许容器端口通过主机的防火墙。配置容器的正确 dns 服务器。选择正确的容器网络模式。排除主机网络问题,如防火墙或连接问题。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

417

2024.04.08

docker镜像有什么用
docker镜像有什么用

docker 镜像是预构建的软件组件,用途广泛,包括:应用程序部署:简化部署,提高移植性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

454

2024.04.08

chatgpt使用指南
chatgpt使用指南

本专题整合了chatgpt使用教程、新手使用说明等等相关内容,阅读专题下面的文章了解更多详细内容。

0

2026.03.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号