如何通过Docker仅复制/克隆镜像之间的文件夹结构?
仅复制源镜像目录结构到目标镜像的实现方案
针对你需要保留源镜像目录结构但不复制文件的需求,结合数据量较大不能全量复制再删除的背景,推荐以下两种高效实现方式:
方法一:Docker多阶段构建(推荐)
利用多阶段构建直接从源镜像提取目录结构,再在目标镜像中创建对应目录,全程无需全量复制文件:
# 第一阶段:从源镜像提取目录结构 FROM source-image AS dir-extractor # 如果源镜像没有find命令,先安装(根据镜像系统调整命令) # Debian/Ubuntu系:RUN apt-get update && apt-get install -y --no-install-recommends findutils # Alpine系:RUN apk add --no-cache findutils RUN find /files -type d -print0 > /dir-structure.txt # 第二阶段:在目标镜像中创建目录 FROM target-base-image COPY --from=dir-extractor /dir-structure.txt /tmp/ # 读取目录结构并创建,-print0和-d ''组合处理含特殊字符的目录名 RUN while IFS= read -r -d '' dir; do mkdir -p "$dir"; done < /tmp/dir-structure.txt RUN rm /tmp/dir-structure.txt
说明
-type d指定只遍历目录,-print0确保目录名含空格、换行等特殊字符时也能正确处理mkdir -p会自动创建不存在的父目录,完美还原层级结构- 多阶段构建避免了源镜像的冗余内容进入目标镜像
方法二:临时容器导出目录结构再构建
如果源镜像无法安装find工具,可先通过临时容器导出目录结构,再带入构建流程:
- 先执行终端命令导出目录结构:
docker run --rm source-image find /files -type d -print0 > dir-structure.txt
- 编写Dockerfile:
FROM target-base-image COPY dir-structure.txt /tmp/ RUN while IFS= read -r -d '' dir; do mkdir -p "$dir"; done < /tmp/dir-structure.txt RUN rm /tmp/dir-structure.txt
说明
- 这种方式无需修改源镜像相关的构建步骤,适合受限的源镜像环境
内容的提问来源于stack exchange,提问作者Jan Rothkegel
相关产品推荐
相关产品推荐

