docker save 和 docker load 是 java 应用 docker 镜像离线迁移的核心命令,通过 tar 文件直接传输镜像层数据,无需网络或仓库,适用于内网、断网及安全隔离环境。

Java 应用在 Docker 中通常被打包为镜像运行,而 docker save 和 docker load 是实现离线迁移的核心命令——它们不依赖网络或镜像仓库,直接通过 tar 文件传输镜像层数据,特别适合内网、断网或安全隔离环境。
确认 Java 镜像已存在本地
迁移前需确保目标镜像已在源机器上构建或拉取完成。例如你有一个基于 OpenJDK 的 Spring Boot 应用镜像:
- 检查镜像列表:
docker images | grep my-java-app - 确认 TAG 和 IMAGE ID(如
my-java-app:1.2或a1b2c3d4e5f6) - 若尚未构建,先执行
docker build -t my-java-app:1.2 .(Dockerfile 中应含FROM openjdk:17-jre-slim等 Java 基础镜像)
使用 save 打包为 tar 文件(源机器)
docker save 将镜像(含所有层和元数据)导出为单个 tar 包,支持多个镜像同时保存:
- 保存单个镜像(推荐用 REPOSITORY:TAG):
docker save -o my-java-app-1.2.tar my-java-app:1.2 - 保存多个镜像(如含基础镜像):
docker save -o java-stack.tar my-java-app:1.2 openjdk:17-jre-slim - 注意:不要用镜像 ID 直接 save(易混淆),优先使用可读的名称+TAG
- 生成的 tar 文件不含运行时数据(如容器、卷),仅镜像本身
拷贝 tar 文件到目标机器
这是纯文件传输过程,无 Docker 依赖:
- 可用
scp、U盘、内网 FTP、共享目录等方式传输my-java-app-1.2.tar - 目标机器无需预先安装相同基础镜像——
save已包含全部层,load会完整还原 - 建议校验文件完整性(如
sha256sum my-java-app-1.2.tar源/目标比对)
使用 load 加载镜像(目标机器)
docker load 从 tar 文件恢复镜像到本地镜像库,自动解析并注册所有层和标签:
- 加载命令:
docker load -i my-java-app-1.2.tar - 成功后执行
docker images可看到原镜像(REPOSITORY、TAG、IMAGE ID 均与源一致) - 若 tar 中含多个镜像,
load会一并导入;无需额外操作 - 加载后即可直接运行:
docker run -d --name myapp -p 8080:8080 my-java-app:1.2
整个流程不涉及 registry 认证、网络拉取或镜像重写,是 Java 微服务在受限环境中安全迁移最稳妥的方式。只要两端 Docker 版本兼容(建议 ≥20.10),tar 包就能可靠复用。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











