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
⚠️关键坑
- 不加
--platform,x86机器默认拉amd64,导出后ARM机器报exec format error。 docker save只导出本地已经拉取的镜像,不会自动跨架构下载。- 离线机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
注意点
- 联网机器必须docker支持buildx(docker ≥20.10)。
- 导出的tar拷贝到目标离线机器,不要改名内部镜像tag。
- 若本地已经缓存别的架构镜像,先
docker rmi 镜像名:tag再跑脚本,避免导出错误架构。