Docker:x86联网机拉取指定架构镜像 → 导出tar → 离线机器导入(通用极简教程)

admin
2
2026-09-16

Docker:x86联网机拉取指定架构镜像 → 导出tar → 离线机器导入(通用极简教程)

目标:x86_64联网主机,下载 linux/arm64(或linux/amd64)镜像,导出tar包,拷贝到离线机器导入。
前提:联网x86机器已安装docker,buildx可用。

1. 联网x86机器操作

1.1 初始化buildx(仅第一次执行)

docker buildx create --use --name multiarch
docker buildx inspect --bootstrap

1.2 拉取指定架构镜像

# 拉取arm64示例
docker pull --platform linux/arm64 dxflrs/garage:v2.3.0

# 如果要拉x86_64(amd64),替换参数
# docker pull --platform linux/amd64 dxflrs/garage:v2.3.0

1.3 导出tar镜像包

docker save dxflrs/garage:v2.3.0 -o image-arm64.tar

得到文件 image-arm64.tar,拷贝到离线服务器(U盘/内网传输)。

2. 离线目标机器操作

2.1 导入镜像

docker load -i image-arm64.tar

2.2 校验架构(必做,防止拿错包)

docker inspect dxflrs/garage:v2.3.0 | grep Architecture

预期输出arm64 / amd64,和你下载的架构一致。

3. 快速替换模板(任意多架构镜像通用)

# 联网x86
docker pull --platform linux/arm64 【镜像名:tag】
docker save 【镜像名:tag】 -o image-arm64.tar

# 离线机
docker load -i image-arm64.tar
docker inspect 【镜像名:tag】 | grep Architecture

⚠️关键坑

  1. 不加--platform,x86机器默认拉amd64,导出后ARM机器报exec format error
  2. docker save只导出本地已经拉取的镜像,不会自动跨架构下载。
  3. 离线机docker版本建议≥20.10。

可选:打包配置文件一起离线分发

# x86机器,打包镜像+compose+配置
tar -zcvf offline-bundle.tar.gz image-arm64.tar docker-compose.yml garage.toml

离线机解压后直接docker compose up -d

shell 一键脚本

pull‑save‑offline.sh

x86联网机器执行,输入镜像名、架构,自动拉取并输出tar包。

# 参数: ./pull-save-offline.sh 镜像名:tag 平台
# 示例:./pull-save-offline.sh dxflrs/garage:v2.3.0 linux/arm64

IMAGE="$1"
PLATFORM="$2"

if [ $# -ne 2 ];then
    echo "用法: $0 <image:tag> <platform>"
    echo "示例: $0 dxflrs/garage:v2.3.0 linux/arm64"
    echo "常用平台: linux/arm64  linux/amd64"
    exit 1
fi

# 初始化buildx,只执行一次
if ! docker buildx inspect multiarch >/dev/null 2>&1;then
    echo "初始化buildx multiarch..."
    docker buildx create --use --name multiarch
    docker buildx inspect --bootstrap
fi

TAR_NAME="${IMAGE//\//_}-${PLATFORM//\//_}.tar"

echo "====================================="
echo "镜像:      $IMAGE"
echo "目标平台:  $PLATFORM"
echo "输出文件:  $TAR_NAME"
echo "====================================="

echo "1.拉取指定架构镜像..."
docker pull --platform "${PLATFORM}" "${IMAGE}"

echo "2.导出tar包..."
docker save "${IMAGE}" -o "${TAR_NAME}"

echo "完成! 输出文件: $TAR_NAME"
ls -lh "${TAR_NAME}"

使用方式

# 增加执行权限
chmod +x pull-save-offline.sh

# 拉取 garage arm64
./pull-save-offline.sh dxflrs/garage:v2.3.0 linux/arm64

# 拉取 seaweedfs arm64
# ./pull-save-offline.sh chrislusf/seaweedfs:latest linux/arm64

生成示例文件:dxflrs_garage_v2.3.0-linux_arm64.tar


离线机器导入校验脚本 load-check-offline.sh

拷贝tar包到离线主机使用

if [ $# -ne 1 ];then
    echo "用法 $0 xxx.tar"
    exit 1
fi
TARFILE="$1"

echo "导入镜像 $TARFILE"
docker load -i "${TARFILE}"

IMG_TAG=$(tar -Of "$TARFILE" manifest.json | jq -r '.[0].RepoTags[0]')
echo "镜像标签: $IMG_TAG"

ARCH=$(docker inspect "$IMG_TAG" | jq -r '.[0].Architecture')
echo "检测架构: $ARCH"

离线机使用示例:

chmod +x load-check-offline.sh
./load-check-offline.sh dxflrs_garage_v2.3.0-linux_arm64.tar

依赖说明:离线脚本依赖jq,没有jq的机器就手动执行:

docker load -i xxx.tar
docker inspect dxflrs/garage:v2.3.0 | grep Architecture

注意点

  1. 联网机器必须docker支持buildx(docker ≥20.10)。
  2. 导出的tar拷贝到目标离线机器,不要改名内部镜像tag。
  3. 若本地已经缓存别的架构镜像,先docker rmi 镜像名:tag再跑脚本,避免导出错误架构。
动物装饰