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

Docker多阶段构建无法从第一阶段获取文件的问题

Docker多阶段构建文件复制为空问题解决

问题根源

amazon/aws-cli官方镜像的/tmp目录属于临时文件系统(tmpfs),构建阶段写入该目录的内容不会被持久化到镜像层中。因此第二阶段从stage1复制/tmp时,实际没有可复制的有效文件。

修正方案

避开系统临时目录,使用自定义目录存储S3下载的文件,确保内容能被保留到镜像层供后续阶段复制:

修正后的Dockerfile

# stage 1: download app data from s3
FROM amazon/aws-cli as stage1
# 创建自定义下载目录,替代系统/tmp
RUN mkdir -p /s3-downloads
WORKDIR /s3-downloads
RUN aws s3 cp s3://rnaseqdata/ . --recursive
# 验证文件是否下载成功
RUN ls -lh

# stage 2
FROM rocker/shiny-verse:4.2.3 as stage2
# 显式创建目标父目录,避免自动创建时的路径/权限问题
RUN mkdir -p ./inst/application
# 从stage1的自定义目录复制文件到目标路径
COPY --from=stage1 /s3-downloads/* ./inst/application/
# 验证复制结果
RUN ls -lah inst/application
CMD ["/bin/bash"]

关键修改说明

  • 用自定义目录/s3-downloads替代系统/tmp,规避tmpfs导致的内容丢失问题
  • 显式创建目标父目录./inst/application,确保路径结构合法
  • COPY命令使用/s3-downloads/*明确复制目录内所有文件,避免路径匹配歧义

内容的提问来源于stack exchange,提问作者Victor Yuan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 19:58:23