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
相关产品推荐
相关产品推荐

