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

Docker cp、docker export与docker save的区别及最优方案咨询

三种Docker文件提取操作的核心区别
  • 方法1:docker create + docker export
    导出的是容器运行时的单层文件系统快照,输出的tar包不包含原镜像的分层信息、历史提交记录、镜像元数据(如启动入口、环境变量等配置),也不会包含未挂载的Volume数据。解压后是完全扁平的单级文件结构,和运行中容器的根目录内容完全一致。
    你用到的对应命令为:

    # 创建占位容器
    docker create -ti --name mysql_dummy mysql bash
    # 导出容器文件系统快照
    docker export mysql_dummy > <path>/mysql.tar
    
  • 方法2:docker save
    导出的是完整的镜像本体,包含镜像所有的分层数据、历史提交记录、全部元数据配置。你看到的多层哈希目录结构就是Docker镜像原生的分层存储结构,这个tar包可以通过docker load命令完整恢复为原镜像,所有层信息、配置属性都不会丢失。
    对应命令为:

    docker save mysql > <path>/mysql.tar
    
  • 方法3:docker create + docker cp
    直接把容器的文件系统内容复制到宿主机本地目录,和docker export的输出内容几乎完全一致,都是打平的单层文件结构,不包含层信息、镜像元数据。和docker export唯一的区别是docker cp直接输出为本地文件目录,不需要额外的解压步骤。
    对应命令为:

    docker cp mysql_dummy:/. <path>
    
镜像多层合并为单份拷贝的实现方法

有两种成熟方案可以实现层合并:

  1. 直接使用上述docker export或者docker cp方案,拿到的本身就是合并后的单层文件内容,如果需要转回单一层镜像,可以将导出的文件通过Dockerfile重新构建:基础镜像指定为scratch,再用ADD指令把整个文件系统添加进去即可。
  2. 构建镜像时开启Docker实验特性,使用docker build --squash参数,构建过程会自动把所有层合并为单层;对于已有镜像也可以使用docker-squash工具处理,输出合并后的单一层镜像。
选型推荐

根据你需要处理容器内文件(包括.so文件)的需求,按场景选择即可:

  • 仅需要提取文件本身做处理,不需要保留镜像元数据、层信息,优先选docker cp,省略打包解压步骤,直接拿到本地目录即可操作,效率最高。
  • 需要把提取的文件系统整体备份、转移,不需要保留镜像配置,选docker export,输出单个tar包更方便传输存储。
  • 需要完整保留镜像的所有配置、层信息,后续还要用docker load重新导入为镜像使用,才选docker save。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 02:24:04