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:... | 按摘要引用外部镜像 | 最稳,不受上游标签变动影响 |
引用外部镜像时构建器会先拉取它,离线环境会直接失败;构建机要保证能访问对应仓库,或提前把镜像准备好。
从多架构镜像复制文件时按构建目标平台解析,平台不一致会把错误架构的二进制带进产物。
把二进制复制进精简基础镜像前先确认动态库依赖:只复制可执行文件而缺依赖时,运行阶段会报找不到共享库。