最常用且最稳妥的离线迁移方式是用 scp 传输导出的镜像 tar 包。该方式不依赖公网与镜像仓库,适用于网络隔离、防火墙严格或无外网权限环境;需先 docker save 导出镜像为 tar 文件,再通过 scp 上传至内网服务器指定路径,最后在目标机执行 docker load -i 加载并验证。

直接用 scp 把导出的镜像 tar 包传到内网服务器,是最常用也最稳妥的离线迁移方式。整个过程不依赖公网、不走镜像仓库,适合网络隔离、防火墙严格或无外网权限的环境。
确认镜像并导出为 tar 文件
先在本地(有镜像的机器)查清目标镜像名和标签:
- 运行
docker images,记下你要传的镜像,比如myapp:1.2.0或nginx:alpine - 用
docker save打包成单个 tar 文件:docker save -o myapp-1.2.0.tar myapp:1.2.0 - 如果要打包多个镜像(例如连同基础镜像一起传),可以写成:
docker save -o full-stack.tar nginx:alpine redis:7 myapp:1.2.0
用 scp 上传到内网服务器
scp 基于 SSH,只要内网服务器开放了 22 端口且你有登录权限,就能传。命令格式固定:
- 基本写法:
scp myapp-1.2.0.tar user@192.168.10.50:/opt/docker-images/ - 如果目标服务器 SSH 端口不是默认 22,加
-P参数(注意大写 P):scp -P 2222 myapp-1.2.0.tar admin@10.0.3.12:/data/ - 路径不存在会自动创建?不会。请提前登录目标服务器,用
mkdir -p /opt/docker-images确保目录存在
在内网服务器上加载并验证
登录内网服务器后,执行加载操作:
- 运行:
docker load -i /opt/docker-images/myapp-1.2.0.tar - 检查是否成功:
docker images | grep myapp—— 应该能看到镜像名、TAG 和 IMAGE ID - 可选:立即测试运行一次容器,确认镜像可用:
docker run --rm myapp:1.2.0 sh -c 'echo "OK, loaded!"'
小提示:传输大文件或批量操作更省事
如果镜像体积大(几百 MB 以上),建议加 -C 开启压缩传输,节省时间和带宽:
scp -C myapp-1.2.0.tar user@192.168.10.50:/opt/- 想一次传多个 tar 包,直接列出来:
scp app.tar db.tar cache.tar user@192.168.10.50:/opt/ - 不想每次输密码?配置 SSH 免密登录(生成 key 并用
ssh-copy-id推送公钥)











