docker save 打包镜像并通过 scp 加密传输至内网服务器是最常用且最安全的离线迁移方式,全程不经过公网、不依赖镜像仓库,数据在 ssh 加密通道中流转,天然保障完整性与机密性。

用 docker save 打包镜像,再通过 scp 加密传输到内网服务器,是最常用也最安全的离线迁移方式。整个过程不经过公网、不依赖镜像仓库,所有数据都在 SSH 加密通道中流转,天然具备完整性与机密性保障。
确认并导出镜像为 tar 文件
先在有网络的机器上拉取或确认目标镜像:
- 运行
docker images查看镜像名和标签,例如myapp:2.1.0或python:3.9-slim - 用
docker save -o myapp-2.1.0.tar myapp:2.1.0导出为单个归档文件 - 如需打包多个镜像(含基础镜像),可一次性指定:
docker save -o full-app.tar nginx:alpine redis:7.2 myapp:2.1.0
用 scp 安全传输镜像文件
scp 基于 SSH 协议,默认加密传输,无需额外配置即可防窃听和篡改:
- 基本命令:
scp myapp-2.1.0.tar user@192.168.10.50:/opt/docker-images/ - 若目标 SSH 端口非 22,加
-P参数(大写):scp -P 2222 myapp-2.1.0.tar admin@10.0.3.12:/data/ - 大文件建议启用压缩:
scp -C myapp-2.1.0.tar user@192.168.10.50:/opt/,节省带宽且不影响安全性 - 目标路径需提前存在,登录内网机执行
mkdir -p /opt/docker-images即可
在内网服务器加载并验证镜像
传输完成后,登录内网服务器执行加载操作:
- 运行
docker load -i /opt/docker-images/myapp-2.1.0.tar - 检查是否成功:
docker images | grep myapp,应显示镜像名、TAG 和 IMAGE ID - 快速验证可用性:
docker run --rm myapp:2.1.0 sh -c 'echo "Loaded OK"' - 如需统一管理,可打本地标签后推送到内网私有 Registry:
docker tag myapp:2.1.0 registry.internal/myapp:2.1.0 && docker push registry.internal/myapp:2.1.0
增强安全性的实用建议
对合规要求高的环境(如金融、政务),还可补充以下措施:
- 导出前计算 SHA256 校验值:
sha256sum myapp-2.1.0.tar > myapp-2.1.0.tar.sha256,传输后在内网机校验一致性 - 限制 scp 用户权限:使用专用账号 + 公钥认证 + 只读目录,避免 root 直接登录
- 镜像本身若含敏感信息,建议在导出前用
docker build --squash或多阶段构建精简层数,减少攻击面 - 批量迁移时,可将
save和load封装为脚本,并加入时间戳与版本标记,便于审计追踪











