docker load 是什么
load 把用 docker save 生成的归档导入本地镜像库,还原出带标签与分层信息的镜像,镜像 ID 与导出源一致,因此常用来校验搬运过程是否完整。它与 import 的根本差别在于来源与结果:load 面向镜像归档,保留层结构与配置;import 面向容器文件系统快照,导入后只有一层内容,需要自己补启动配置。两者不可互相替代。
基本信息
| 语法 | docker load -i 文件.tar 或 docker load < 文件.tar |
|---|---|
| 静默模式 | -q 只输出结果不打印各层进度 |
| 压缩归档 | gunzip -c 文件.tar.gz | docker load |
| 还原内容 | 各层、标签、镜像配置与构建历史 |
| 与 import 区别 | import 只产生扁平文件系统镜像,丢弃历史 |
| 磁盘要求 | 解压后的占用大于归档文件本身,load 前确认余量 |
典型使用场景
- 离线环境部署:把外网导出的归档在内网机器上还原
- 交付校验:目标机上 load 后用镜像 ID 与来源比对,确认文件未损坏
- 批量迁移:一次 load 多个镜像的合并归档,逐个确认标签
- 回滚准备:把历史版本归档留存,需要时快速还原
- 多节点分发:在每台节点上分别 load 同一份归档
导入与核对
导入与核对
# 常规导入并查看过程
docker load -i app-web-1.0.tar
# 压缩包直接管道导入
gunzip -c app-web-1.0.tar.gz | docker load
# 静默导入:脚本里更清爽,便于只看结果
docker load -q -i app-web-1.0.tar
# 核对结果:标签、镜像 ID、摘要都应与导出源一致
docker images --format '{{.Repository}}:{{.Tag}} {{.ID}} {{.Size}}' app/web
docker image inspect app/web:1.0 --format '{{index .RepoDigests 0}}'
# 磁盘余量不足时的提示最直观
df -h /var/lib/docker常见提示判读
| 提示或现象 | 含义 | 处理方向 |
|---|---|---|
| Loaded image: 仓库:标签 | 导入成功并恢复标签 | 继续用镜像 ID 做核对 |
| no space left on device | 目标盘空间不足 | 清理悬空镜像或扩容后重试 |
| open 文件: no such file | 路径写错或文件未传完 | 确认文件名与传输完整性 |
| invalid tar header | 归档损坏或传了一半 | 重新导出或重新传输 |
| 导入后无标签(<none>) | 归档来自无标签镜像 | 按需补打标签 |
load 会新增镜像记录,不会替换正在运行的容器所使用的镜像:运行中的容器仍指向旧镜像 ID,需要重建容器才会用上新导入的内容。
归档保留分层结构,因此导入后的镜像也可以正常参与后续构建的缓存比较;这与 import 得到的单层镜像行为差别明显。