首页/云/Docker 容器速查/COPY 复制文件进镜像
镜像与构建107 条

COPY 复制文件进镜像

从构建上下文把文件/目录复制进镜像:不自动解压、不支持远程 URL,是复制内容的首选指令。

Docker 容器速查云更新于 2026-10-13

COPY 是什么

从构建上下文把文件或目录复制进镜像,是往镜像里放内容的首选指令。它不自动解压、不支持远程地址,行为简单可预期,配合排除规则能精确控制哪些文件进入镜像。多阶段构建里还能从其他阶段直接复制产物。

基本信息

语法COPY [选项] 源... 目标
路径基准构建上下文根目录,不是构建描述所在目录
常用选项--from 从指定阶段或镜像复制 --chown 指定属主 --chmod 指定权限
多个源源有多个时目标必须是目录
通配符支持简单的通配匹配,便于批量复制同类型文件

典型使用场景

  • 复制依赖清单:先只复制依赖描述文件,让依赖安装层可以复用缓存
  • 复制源码:依赖装好后再复制业务代码,改动代码不会触发重新安装
  • 从构建阶段取产物:编译阶段产出可执行文件,运行阶段只复制这一个文件
  • 放入配置文件:把默认配置与启动脚本放进镜像的约定目录
  • 注入证书与静态资源:把证书链、前端静态文件放到运行需要的路径

常用示例

常用示例
COPY package.json package-lock.json ./      # 先复制依赖清单利用缓存
COPY src/ /app/src/                         # 复制源码目录
COPY --from=build /out/app /usr/local/bin/app   # 从构建阶段取产物
COPY --chown=1000:1000 ./config /app/config  # 复制并指定属主
COPY *.sh /opt/scripts/                     # 通配批量复制

与另一个复制指令的差别

对比项COPY另一个复制指令
自动解压不支持本地压缩包会自动解压
远程地址不支持可直接从网络地址下载
行为可预期性高,行为简单隐式能力多,容易出现意外结果
推荐程度日常复制的首选仅在确实需要解压或下载时使用
缓存影响内容变化即失效远程内容变化时缓存判断不如本地文件直观

写复制前的检查

  • 确认目标路径是否在镜像里存在,不存在时按文件语义处理,可能得到意外的文件名
  • 多个源复制时目标写成目录,避免被当成重命名
  • 检查排除规则有没有把这些文件挡住,被挡住的源会直接报错
  • 复制源码时留意不要让本地的依赖目录覆盖容器里已装好的依赖
  • 关键文件复制后核对属主与权限,运行用户需要有读取权限
源路径不能跳出构建上下文。需要复制上下文之外的文件时,要么扩大上下文范围,要么调整目录结构,硬写上层路径会直接构建失败。
多阶段构建里从其他阶段复制产物是压缩最终镜像体积的关键手段:工具链留在构建阶段,运行阶段只带产物与运行时依赖。

易错点

  • 复制源码时把本地依赖目录一起带进去,覆盖了容器里已安装的依赖,原生模块直接失效
  • 目标目录不存在时被当成文件处理,得到意料之外的文件名
  • 源路径写到上下文之外,构建直接失败,报错信息不一定直观
  • 复制后没有调整属主,运行用户读不到文件,服务启动即失败

数据来源与参考

  • Docker 官方文档:Dockerfile COPY(docs.docker.com)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌