You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Docker最终镜像访问基础镜像添加的文件?

问题原因

你当前的配置无法运行,核心是多阶段构建的用法错误:Dockerfile中连续使用多个FROM指令时,只有最后一个FROM指定的镜像会成为最终镜像的基础,之前FROM base1阶段的文件不会自动继承到ubuntu镜像中,因此执行RUN tar -zxvf myfile.tgz时会提示文件不存在。

解决方法

方法1:通过COPY --from复制前置阶段的文件

给第一个阶段设置别名,然后从该阶段将需要的文件复制到最终的ubuntu镜像中,这是多阶段构建的标准用法:

# 第一阶段:准备文件(使用base1镜像)
FROM scratch AS base-stage
ADD myfile.tgz .

# 第二阶段:构建最终镜像(基于ubuntu)
FROM ubuntu
# 从base-stage阶段复制myfile.tgz到当前镜像的根目录
COPY --from=base-stage /myfile.tgz /

RUN tar -zxvf myfile.tgz

方法2:直接基于base1构建(仅适用于不需要ubuntu环境的场景)

如果你的业务不需要ubuntu的系统环境,可以去掉FROM ubuntu,直接在base1镜像基础上操作:

FROM base1
# 注意:scratch是空白镜像,没有shell和包管理工具,后续RUN指令需要适配该环境
补充说明
  • 多阶段构建的优势是可以利用前置阶段生成或存储文件,最终仅将需要的内容复制到最终镜像,有效减少镜像体积。
  • 所有需要从前置阶段获取的文件,必须通过COPY --from=阶段名明确指定复制路径,否则最终镜像不会自动包含前置阶段的内容。

内容的提问来源于stack exchange,提问作者Vinay N Karanth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 12:52:34