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

如何通过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工具,可先通过临时容器导出目录结构,再带入构建流程:

  1. 先执行终端命令导出目录结构:
docker run --rm source-image find /files -type d -print0 > dir-structure.txt
  1. 编写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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 14:04:59