docker import 导入的是 docker export 生成的容器快照(扁平化文件系统),不保留元数据、启动命令或历史层,需手动指定标签和运行参数;而 docker load 导入的是 docker save 生成的完整镜像包,含所有层、配置和标签,可直接运行。
从压缩包导入容器快照,本质是把 docker export 导出的 tar 文件还原为一个可运行的镜像,再启动容器。这不是导入“容器”,而是导入“容器快照”生成新镜像。
确认你导出的是容器快照
只有用 docker export 生成的 tar 包才属于“容器快照”。常见命令如下:
docker export -o app.tar container_iddocker export container_id > app.tar
这类文件只含容器当时的文件系统(扁平化层),不含镜像元数据(如 CMD、EXPOSE、ENV)、构建历史或网络/卷配置。
用 docker import 将快照转为镜像
执行 import 命令,指定 tar 路径和目标镜像名+标签:
docker import app.tar myapp:latest- 支持带注释:
docker import -m "backup from prod" app.tar myapp:v2 - 也可通过管道导入:
cat app.tar | docker import - myapp:dev
导入后运行 docker images 可看到新镜像,但注意:它没有默认启动命令,需手动指定 docker run ... cmd。
启动容器时必须指定运行参数
因为快照不保留原始镜像的启动配置,所以启动时要补全关键信息:
- 端口映射:
-p 8080:80 - 环境变量:
-e ENV=prod - 启动命令:
nginx -g "daemon off;"或/bin/sh -c "your-app" - 挂载数据卷(如有):
-v /data:/app/data
例如:docker run -d -p 8080:80 -e DEBUG=true myapp:latest nginx -g "daemon off;"
对比 save/load 更适合什么场景
如果你原本有镜像(不是容器),应该用 docker save 和 docker load。它们保留完整结构,能直接 docker run 镜像名 启动,无需额外配置。
- export/import → 适合临时迁移已配置好的运行中容器(比如调试完立刻打包给测试)
- save/load → 适合标准镜像交付、备份、CI/CD、离线部署等正式流程


















