# Docker 镜像源下线，Image 越来越难以拉取？试试下载后离线转移到线上环境

> 本文公开全文。

原文：https://utgd.net/article/20798

在实际开发和运维过程中，Docker 镜像的拉取有时会因为网络问题或者镜像源的限制变得困难。

再加上最近 Docker 的国内镜像源被下线，导致在国内拉取 Docker 镜像变得越来越困难。尤其是在一些受限网络环境中，拉取 Docker 镜像可能会变得非常耗时甚至不可能。再加上生产环境一般不会配置网络方面的额外代理。

就我自己的使用场景而言，在 NAS 中直接拉取 Docker 镜像的功能几乎已经用不了了。所以我需要找一个方法，尽可能简便的解决这一问题。

本文将介绍如何在本地电脑上拉取 gitea/act\_runner 镜像并导出为 tar 文件，然后将其离线转移到另一个系统上进行加载。

## 在本地电脑上拉取镜像

首先你需要在个人电脑上安装 Docker，最简单的方法就是去 docker 的官网，下载图形化的 Docker Desktop 进行安装。

🔗 下载 Docker Desktop

### 1\. 拉取指定架构的镜像

我们先讨论最常见的情况，如果你在 x86 的 Windows 电脑上操作，并且这个镜像也会用在 x86 的服务器、NAS 上，你可以省略指定架构的参数，直接拉取镜像：

```
docker pull gitea/act_runner
```

但是这里会遇到第一个问题，如果你在 M 芯片的 Mac 电脑上拉取，再继续后面的步骤会出现报错。

这是因为当我们直接使用 docker pull 命令的时候，是 docker 自动判断了当前设备的架构进行对应的镜像拉取的。

因为一般来说，服务器都是 x86 架构的。而个人电脑可能会分为 x86 架构（Windows 电脑）和 ARM 架构（M 芯片的 Mac 电脑）。一旦本地环境的架构和生产环境的架构有不同，就需要手动指定架构了。其实也很简单。

如果你在 M 芯片的 Mac 上操作，就需要拉取指定架构的镜像。通过以下命令可以指定为 linux/amd64 架构：

```
docker pull --platform linux/amd64 gitea/act_runner
```

同理，如果你想在 Windows 电脑上拉取镜像，跑在 Mac 电脑上（虽然很少见），你得根据 Mac 电脑的 ARM 架构，指定为 linux/arm64 架构：

```
docker pull --platform linux/arm64 gitea/act_runner
```

提示：如果你不确定到底是什么架构的，可以去网上搜索对应设备的型号，找到 CPU，再搜索该 CPU 的架构（可以直接询问 AI）。

参考链接：如何查找 Synology NAS 的 CPU 型号？ \- Synology 知识中心

### 2\. 导出镜像为 tar 文件

接下来的步骤就容易多了。

拉取完镜像后，我们可以使用 docker save 命令将镜像导出为一个 tar 文件，便于传输和备份：

```
docker save -o gitea_act_runner.tar gitea/act_runner
```

这样就可以在运行这行命令的目录下，找到 gitea\_act\_runner\.tar 这个压缩包文件。

## 将 tar 文件转移到服务器

导出后的 tar 文件可以通过任意文件传输工具或方法转移到服务器，例如 scp, rsync, U 盘等。这里我们以 scp 为例，将 tar 文件传输到服务器：

```
scp gitea_act_runner.tar user@192.168.1.100:/path/to/destination
```

## 在服务器上导入镜像

在服务器上，我们需要使用 docker load 命令来加载 tar 文件，从而恢复出原先的 Docker 镜像：

```
docker load -i /path/to/destination/gitea_act_runner.tar
```

通过以上步骤，就可以成功地将 gitea/act\_runner 镜像从一个系统转移到另一个系统，并确保它是 linux/amd64 架构的版本。

## 在群晖 NAS 上导入镜像

在群晖 NAS 上更为简单，转移和导入都可以通过图形化界面完成。

你只需要在 Container Manager 中，打开“映像”，进行“操作 \- 导入 \-从文件添加 \- 从本地设备”，然后选择你刚刚打包好的 tar 文件即可。

## 快速笔记

由于这个操作会经常遇到，我总结了一份 Cheat Sheet，你可以把下面这段内容保存下来，以便未来快速使用。

### 在个人电脑上

```
# 拉取指定架构的镜像
docker pull --platform linux/amd64 【镜像名称】

# 导出镜像为 tar 文件
docker save -o package.tar 【镜像名称】
```

### 文件传输

使用 scp 将文件传输到目标系统（假设目标系统 IP 为 192\.168\.1\.100）：

```
scp package.tar user@192.168.1.100:/path/to/destination
```

### 在目标系统上

```
# 加载镜像
docker load -i /path/to/destination/package.tar
```

按照这些步骤，就可以成功地将 Docker 镜像离线转移到其他系统。

---

[前往标准阅读页](https://utgd.net/article/20798?audience=web)
