服务器无法直接拉取镜像时如何离线传输镜像?

本文适用于:

  • • Docker 20+ / 24+
  • • 服务器处于内网环境,无法访问外网
  • • 防火墙策略限制,无法拉取外部镜像
  • • 需要批量部署相同镜像到多台服务器

⚠️ 重要提示

当服务器无法直接拉取镜像时,通过 docker save/load 实现离线传输是最可靠的方案。

操作流程:

有网络机器:docker pull → docker save → 传输 tar 文件
  ↓
目标服务器:接收 tar 文件 → docker load → 完成

✅ 推荐做法

使用 docker save 保存镜像为 tar 文件,通过 SCP/FTP 传输。在目标服务器使用 docker load 加载,无需网络连接即可使用。

如果您的服务器因为网络限制、防火墙策略或无法访问外网等原因,无法直接使用 docker pull 命令拉取镜像,可以通过离线传输的方式将镜像文件传输到服务器上。

适用场景

  • 服务器处于内网环境,无法访问外网
  • 防火墙策略限制,无法拉取外部镜像
  • 网络不稳定,直接拉取经常失败
  • 需要批量部署相同镜像到多台服务器

操作步骤

步骤 1:在有网络的机器上拉取镜像

找一台可以正常访问外网、没有防火墙限制的机器(可以是您的个人电脑、跳板机或其他服务器),执行以下命令拉取镜像:

docker pull <镜像名:tag>

示例:

# 拉取 nginx 镜像 docker pull nginx:latest # 拉取自定义镜像(带域名前缀) docker pull xxx.xuanyuan.run/library/nginx:latest

步骤 2:将镜像保存为离线包(tar 文件)

使用 docker save 命令将镜像保存为 tar 格式的离线包:

docker save <镜像名:tag> -o image.tar

示例:

# 保存 nginx 镜像 docker save nginx:latest -o nginx-latest.tar # 也可以指定完整路径 docker save nginx:latest -o /tmp/nginx-latest.tar

💡 提示:

  • 保存后的 tar 文件大小通常与镜像大小相近,请确保有足够的磁盘空间
  • 可以使用 ls -lh image.tar 查看文件大小
  • 如果需要保存多个镜像,可以一次性保存:docker save image1:tag image2:tag -o images.tar

步骤 3:传输 tar 文件到目标服务器

将生成的 tar 文件传输到您的目标服务器。可以使用以下任意方式:

方式 1:使用 SCP 命令(推荐)

scp image.tar user@服务器IP:/目标路径/
# 示例:传输到服务器的 /tmp 目录 scp nginx-latest.tar root@192.168.1.100:/tmp/

方式 2:使用 FTP/SFTP 工具

使用 FileZilla、WinSCP 等 FTP/SFTP 客户端工具,通过图形界面将文件上传到服务器。

方式 3:使用 U 盘或其他物理介质

如果服务器完全隔离,可以通过 U 盘、移动硬盘等物理介质拷贝文件。

步骤 4:在目标服务器上加载镜像

在目标服务器上,使用 docker load 命令加载离线镜像包:

docker load -i image.tar

示例:

# 加载镜像 docker load -i /tmp/nginx-latest.tar # 加载完成后,可以使用 docker images 查看 docker images | grep nginx

✅ 验证:加载成功后,使用 docker images 命令可以看到镜像已经加载到本地,之后就可以正常使用 docker run 等命令了。

完整操作示例

以下是一个完整的操作示例,演示如何将 nginx 镜像从有网络的机器传输到内网服务器:

# ===== 在有网络的机器上操作 ===== # 1. 拉取镜像 $ docker pull nginx:latest latest: Pulling from library/nginx ... # 2. 保存为离线包 $ docker save nginx:latest -o nginx-latest.tar $ ls -lh nginx-latest.tar -rw-r--r-- 1 user user 150M nginx-latest.tar # 3. 传输到目标服务器(假设服务器IP为 192.168.1.100) $ scp nginx-latest.tar root@192.168.1.100:/tmp/ nginx-latest.tar 100% 150MB 10.0MB/s 00:15 # ===== 在目标服务器上操作 ===== # 4. 登录到目标服务器 $ ssh root@192.168.1.100 # 5. 加载镜像 $ docker load -i /tmp/nginx-latest.tar Loaded image: nginx:latest # 6. 验证镜像已加载 $ docker images | grep nginx nginx latest abc123def456 2 minutes ago 150MB # 7. 现在可以正常使用镜像了 $ docker run -d -p 80:80 nginx:latest

注意事项

  • 镜像名称和标签:使用 docker save 保存的镜像,加载后会保持原有的镜像名称和标签。如果镜像名称包含域名前缀(如 xxx.xuanyuan.run/library/nginx:latest),加载后也会保持这个名称。
  • 磁盘空间:确保目标服务器有足够的磁盘空间来存储镜像文件。镜像 tar 文件的大小通常与镜像本身大小相近。
  • Docker 版本:确保目标服务器已安装 Docker,并且版本不要太旧,建议使用 Docker 20.10 或更高版本。
  • 批量传输:如果需要传输多个镜像,可以一次性保存多个镜像到一个 tar 文件:docker save image1:tag image2:tag image3:tag -o all-images.tar
  • 压缩传输:如果网络带宽有限,可以在保存时使用 gzip 压缩,但需要配合 docker load 使用管道:docker save image:tag | gzip > image.tar.gz,加载时:gunzip -c image.tar.gz | docker load

总结:

  • ✅ 在有网络的机器上使用 docker pull 拉取镜像
  • ✅ 使用 docker save 将镜像保存为 tar 文件
  • ✅ 通过 SCP、FTP 或其他方式将 tar 文件传输到目标服务器
  • ✅ 在目标服务器上使用 docker load 加载镜像
  • ✅ 加载完成后即可正常使用镜像,无需网络连接

本文由「xuanyuan.cloud」维护
专注国内 Docker / 镜像 / Registry 网络问题
内容基于真实用户环境与实测

免费获取在线技术支持请 提交工单,官方QQ群:13763429 。
轩辕镜像面向开发者与科研用户,提供开源镜像的搜索和访问支持。所有镜像均来源于原始仓库,本站不存储、不修改、不传播任何镜像内容。
官方邮箱:点击复制邮箱
©2024-2026 源码跳动