首页/云/Docker 容器速查/COPY --from 引用外部镜像文件
镜像与构建107 条

COPY --from 引用外部镜像文件

--from 不仅可引用本文件内的构建阶段,也能直接引用任意镜像(含远程),用来提取工具、配置或运行时组件。

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

COPY --from 引用镜像

COPY --from 不仅能引用同一份 Dockerfile 里的构建阶段,也能引用任意镜像(含远程镜像),从中提取二进制、配置或运行时组件。它是精简镜像的常用手段:只取需要的文件,而不把整个工具镜像带进最终产物。

基本信息

用途从其他构建阶段或任意镜像复制文件
语法COPY --from=镜像名或阶段名或序号 源 目标
引用方式阶段名、阶段序号(从 0 开始)、镜像名:标签
外部镜像构建时会先解析并拉取该镜像
稳定性建议外部镜像固定版本标签或摘要

典型使用场景

  • 从构建阶段取编译产物到运行阶段,这是多阶段构建的核心用法
  • 从官方镜像里取单个静态二进制(busybox 等),避免整镜像引入
  • 复用其他镜像里的配置文件与证书,保证两侧配置一致
  • 从带工具链的镜像里提取运行阶段缺的库文件
  • 改造老旧镜像时提取其中的资源文件做二次打包
  • 给复制进来的文件顺便指定属主与权限,一次性配好运行环境

示例

示例
COPY --from=nginx:1.27-alpine /etc/nginx/nginx.conf /etc/nginx/nginx.conf
COPY --from=busybox:1.36 /bin/busybox /bin/busybox
COPY --from=0 /out/app /usr/local/bin/app                 # 按序号引用第一个阶段
COPY --from=build --chown=10001:10001 /out/app /app

# 跨架构复制二进制时先确认平台与运行镜像一致

引用方式对照

写法含义注意
--from=build引用 AS build 声明的阶段可读性最好,推荐给阶段命名
--from=0按序号引用第一个阶段调整阶段顺序后含义会变
--from=nginx:1.27引用外部镜像构建机需要能拉取到该镜像
--from=nginx@sha256:...按摘要引用外部镜像最稳,不受上游标签变动影响
引用外部镜像时构建器会先拉取它,离线环境会直接失败;构建机要保证能访问对应仓库,或提前把镜像准备好。
从多架构镜像复制文件时按构建目标平台解析,平台不一致会把错误架构的二进制带进产物。
把二进制复制进精简基础镜像前先确认动态库依赖:只复制可执行文件而缺依赖时,运行阶段会报找不到共享库。

易错点

  • 从 Alpine 镜像复制二进制到 Debian 基础镜像(或反向操作),因 libc 不同导致启动失败或报找不到解释器
  • 用 latest 引用外部镜像,上游更新后构建结果随之变化,出现“昨天还能构建,今天失败”的情况
  • 离线构建环境里引用了外部镜像,构建直接失败,应提前拉取或改为在同文件内自建阶段
  • 复制进来的文件没有设置属主与权限,非 root 运行的镜像里既不可执行也写不了

数据来源与参考

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