首页/云/Docker 容器速查/COPY 通配符与多源复制
镜像与构建107 条

COPY 通配符与多源复制

一次复制多个文件或通配匹配,目标必须是目录;目录源复制的是其内容,不包含目录本身。

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

COPY 通配与多源复制

COPY 支持通配符与多源复制:一次复制多个文件或按通配匹配一批文件时,目标必须是目录。源是目录时复制的是目录内容而不是目录本身,这一点与 shell 下拷目录的习惯不同,容易少拷或多套一层。

基本信息

通配COPY *.json /app/
多源COPY a.txt b.txt /dst/,目标需为目录
目录语义COPY src/ /app/src/ 复制的是 src 的内容
匹配范围在构建上下文内匹配,受 .dockerignore 影响
缓存影响匹配到的文件内容参与层缓存计算

典型使用场景

  • 一次复制多个配置文件进镜像,减少指令条数
  • 按通配复制一类文件,如所有 JSON 配置或所有脚本
  • 分步复制:先复制依赖清单再复制源码,提升缓存命中率
  • 把入口脚本与配置分别复制到不同目录,各自设置权限与属主
  • 排查文件没进镜像:核对通配是否匹配到、是否被忽略规则排除
  • 精简镜像时只复制运行必需的文件,避免整目录复制带入杂物

示例

示例
COPY *.json /app/                              # 通配复制所有 JSON 文件
COPY requirements.txt pyproject.toml /app/     # 多源复制,目标必须是目录
COPY docker/entrypoint.sh /usr/local/bin/      # 单文件复制
COPY --chown=10001:10001 --chmod=755 docker/*.sh /usr/local/bin/

# 目录复制:复制 src 的内容到目标目录
COPY src/ /app/src/

写法与结果对照

写法效果注意
COPY a.txt b.txt /dst/两个文件复制到目录目标不是目录时构建失败
COPY *.json /app/通配匹配到的文件全部复制没有匹配到会报 no source files
COPY src/ /app/src/复制 src 的内容不会多套一层 src 目录
COPY src /app/src/同样复制内容按内容理解更不容易出错
COPY --from=build /out/ /app/从构建阶段复制目录内容制品落地常用写法
通配符在构建上下文内匹配,受 .dockerignore 影响;匹配结果直接参与层缓存计算,文件增减都会让缓存失效。
与 shell 的拷贝语义不同:COPY 源目录不加通配也复制内容,写成 src/* 反而会漏掉隐藏文件(如 .env、.eslintrc)。
多源复制时目标要以斜杠结尾表示目录,写成文件路径会让构建直接报错,这一条能省下不少排查时间。

易错点

  • 通配没有匹配到任何文件会报 no source files,先在本地用同名命令验证匹配结果再构建
  • 误以为 COPY src/* /app/src/ 与 COPY src/ /app/src/ 等价,前者会漏掉隐藏文件
  • 多源复制时目标写成文件路径,构建直接失败,改成目录占位即可
  • 只改文件内容却期望缓存按预期失效:层缓存由指令与内容共同决定,理解这点能少走弯路

数据来源与参考

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