不使用仓库将 Docker 镜像从一台主机复制到另一台主机的方法
不使用仓库将 Docker 镜像从一台主机复制到另一台主机的方法
技术背景
在实际开发和运维过程中,有时无法使用 Docker 仓库来共享镜像,例如在离线环境或网络受限的情况下。这时就需要将 Docker 镜像从一台主机复制到另一台主机。
实现步骤
基本步骤
保存镜像为 tar 文件:
1
docker save -o <path for generated tar file> <image name>
示例:
1
docker save -o c:/myfile.tar centos:16
若镜像有仓库前缀,示例如下:
1
docker save -o C:\path\to\file.tar repository/imagename
复制镜像文件:使用
cp
、scp
或rsync
(大文件推荐)等工具将 tar 文件复制到新系统。加载镜像到 Docker:
1
docker load -i <path to image tar file>
其他传输方式
通过 SSH 传输并压缩
1 |
|
若要查看传输进度,可加入 pv
:
1 |
|
根据网络情况选择压缩方式
- 网络速度快(上传速度达 10 Mb/s 及以上),使用
gzip
:1
docker save <image> | gzip | ssh user@host docker load
- 网络较慢(如移动网络),使用
xz
:1
docker save <image> | xz | ssh user@host docker load
使用 DOCKER_HOST
变量
1 |
|
保存和加载所有镜像
保存所有镜像:
1 |
|
加载所有镜像:
1 |
|
使用 docker-machine
复制镜像
在 mach1
和 mach2
之间复制镜像:
1 |
|
查看进度:
1 |
|
从本地 Docker 安装复制到 minikube VM
1 |
|
使用 docker-machine scp
- 保存镜像:
1 |
|
- 复制镜像:
1 |
|
- 加载镜像:
1 |
|
核心代码
保存和加载单个镜像
1 |
|
保存和加载所有镜像
1 |
|
最佳实践
- 对于大文件,使用
rsync
进行复制,它能更高效地处理大文件传输。 - 根据网络速度选择合适的压缩方式,以提高传输效率。
- 使用
pv
工具查看传输进度,便于监控。
常见问题
- Windows 机器使用 PowerShell 传输问题:在 Windows 机器上使用 PowerShell 执行
docker save <image> | ssh user@host docker load
可能会添加额外字符导致失败,可使用 cmd(命令提示符)。 docker-push-ssh
使用问题:使用docker-push-ssh
时,需要手动将 localhost 添加到 Docker 的insecure_registries
配置中。运行工具时若出现错误提示,可参考相关文档进行配置。
不使用仓库将 Docker 镜像从一台主机复制到另一台主机的方法
https://119291.xyz/posts/2025-05-15.copy-docker-images-between-hosts-without-repo/