导入 tar 镜像的通道
docker load 从 tar 归档导入镜像,与 docker save 配对使用,是内网、隔离网与离线交付场景的标准搬运方式。导入会还原镜像名称、标签与全部层结构,导入后即可 docker run、重新 tag 或 push 到私有仓库。它与 docker import 不是一回事:import 导入的是一份文件系统快照,生成单层镜像且没有历史与启动配置,行为与原镜像并不等价。
基本信息
| 语法 | docker load -i app.tar 或 cat app.tar | docker load |
|---|---|
| 还原内容 | 镜像名、标签、全部层与镜像元数据 |
| 不还原 | 容器、卷、网络配置——这些不属于镜像 |
| 压缩 | save 产出的是 tar,可再经 gzip 压缩减小体积,用管道直接导入 |
| 验证 | docker images 核对标签,docker history 确认层结构 |
| 权限 | 需要访问本机 Docker 守护进程的用户权限 |
典型使用场景
- 内网或隔离网络部署:节点无法访问公网镜像仓库,只能走 tar 包
- 交付到客户现场:镜像与 compose 文件打包一起交付并现场导入
- 跨机房迁移:仓库暂时不可用时用 tar 做一次性搬运
- 版本留存:把上线过的镜像固定成 tar 归档,回滚时无需依赖仓库
- 离线审计场景:先校验哈希再导入,确保镜像内容与审批版本一致
导出、校验与导入
导出、校验与导入
docker save -o myapp-1.0.0.tar myapp:1.0.0 # 配对的导出动作
gzip -1 myapp-1.0.0.tar # 压缩体积,便于跨网传输
sha256sum myapp-1.0.0.tar.gz # 记录或核对哈希,验证完整性
gzip -dc myapp-1.0.0.tar.gz | docker load # 压缩包直接管道导入
docker load -i myapp-1.0.0.tar | tee load.log # 保存导入输出,便于事后核对
docker images | grep myapp # 核对标签与实际镜像 ID导入输出读法
| 输出内容 | 含义 | 需要注意 |
|---|---|---|
| Loaded image: myapp:1.0.0 | 带标签的镜像导入成功 | 核对标签是否与预期一致,尤其带环境后缀时 |
| Loaded image ID: sha256:... | 只导入了镜像 ID,tar 内没有标签信息 | 常见于 import 产物或 save 时未指定 tag,需要手工补标签 |
| <none> 悬空镜像 | 同名同标签被新导入内容顶替 | 回滚依赖该标签时会拿不到旧版本 |
| 层复用提示 | 部分层已存在,直接复用 | 导入很快不代表没有变化,仍要以镜像 ID 为准 |
跨机器搬运还有一条直达路径:docker save IMAGE | ssh user@host docker load,省去中间落盘,适合网络可达但仓库不可用的场景。多节点部署则应改用 Harbor 等私有仓库,逐台 load 无法保证版本一致。
离线 tar 是不经过仓库校验的通道。导入前务必校验 sha256 与来源,被篡改的 tar 会被直接当作可信镜像进入生产环境,后续很难通过镜像扫描追查。