crane 下载镜像:不连接 Docker,3 步准备并校验 ARM64 离线包

下载机能联网,却没有 Docker 权限,照样可以准备镜像包。用 crane pull 指定目标架构,再检查本地归档。注意:crane export 导出的是文件系统,不能当成同一种镜像包。

其他部署排查记录收在:运维漏洞指南。

1. 下载 crane,核对官方校验值

以下在 Linux x86_64 下载机上操作。下载机的架构决定工具版本,目标镜像可以是 ARM64,两者不要混淆。

复制代码
mkdir -p crane-demo
cd crane-demo
curl -fLO https://github.com/google/go-containerregistry/releases/download/v0.22.1/go-containerregistry_Linux_x86_64.tar.gz
curl -fLO https://github.com/google/go-containerregistry/releases/download/v0.22.1/checksums.txt
sha256sum --check --ignore-missing checksums.txt
tar -xzf go-containerregistry_Linux_x86_64.tar.gz crane
./crane version

curl -f 遇到 HTTP 错误会失败;校验命令只检查本地已有的对应文件。先确认压缩包校验成功,再运行解压后的工具。最后一条应输出 0.22.1。

ARM64 下载机要选发行页里的 Linux_arm64 包,不能运行上面的 x86_64 程序。工具放在当前目录,不需要 sudo,也不修改系统 Docker 配置。

2. 用 crane 下载镜像,明确指定 ARM64

--platform linux/arm64 决定镜像的目标平台。下面固定用 Alpine 3.22.0 演示,不使用会变化的 latest 标签。

复制代码
IMAGE=alpine:3.22.0
./crane --platform linux/arm64 pull "$IMAGE" alpine-arm64.tar

命令成功时可以没有输出。本次得到的文件是 4,140,544 字节,但文件存在、大小相近,都不能代替完整性检查。

本次测试把 DOCKER_HOST 指向了一个不存在的套接字,下载仍成功。下载过程没有连接现有 Docker 服务。

3. 检查包是否完整、架构是否正确

validate 检查本地镜像归档。随后从包里的配置读出架构,避免只凭文件名判断。

复制代码
./crane validate --tarball alpine-arm64.tar
python3 - <<'PY'
import json
import tarfile

with tarfile.open('alpine-arm64.tar') as archive:
    manifest = json.load(archive.extractfile('manifest.json'))
    config = json.load(archive.extractfile(manifest[0]['Config']))
    print(config['os'], config['architecture'], config['config']['Cmd'])
PY

本次输出:

复制代码
PASS: alpine-arm64.tar
linux arm64 ['/bin/sh']

看到 PASS 和 linux arm64,才确认本地包通过了本次完整性与架构检查。若要准备 x86_64 镜像,把下载命令的平台改为 linux/amd64,并重新校验。

别把 export 得到的 tar 当成镜像归档

同一个镜像,换成这条命令,得到的是根文件系统:

复制代码
./crane --platform linux/arm64 export "$IMAGE" alpine-rootfs.tar

本次对两个文件逐项检查,区别如下:

本地文件 实测大小 归档内容
alpine-arm64.tar 4,140,544 字节 有 manifest.json、镜像配置和层
alpine-rootfs.tar 8,799,744 字节 直接是 bin/ 等文件系统目录,没有 manifest.json

需要镜像归档时用 pull;需要提取镜像里的文件时用 export。两个文件都叫 tar,不代表用途相同。

本篇验证到下载、归档完整性和架构检查。没有在目标 Docker 主机执行加载或运行容器,不能据此声称目标应用已启动。镜像包也不包含已有容器的挂载卷、数据库或运行中改动。

所有产物都在 crane-demo 目录。回退时不需要重启 Docker;先确认目录里没有其他资料,再移走本次工具和镜像包即可。

同类问题可查:运维漏洞指南。

参考:crane pull 官方说明、crane export 官方说明、v0.22.1 官方发行页。

相关推荐
古法老登瞎折腾1 小时前
大数据智能运维实战(八):从调度任务追到计算引擎——补齐排查链路
java·大数据·运维·spring ai·mcp
zhongben123_1 小时前
从0到1开发一款生鲜配送APP:核心技术难点与架构避坑指南
大数据·运维·人工智能·ios·架构·web app
学页官方2 小时前
部署实战】教培系统私有化部署全流程:从云服务器到上线验收
运维·服务器
时间售卖铺2 小时前
MySQL 备份
运维·数据库·mysql·云原生
指艺2 小时前
VirtualBox安装fedora完成后重启,仍提示安装fedora
运维·服务器
对象存储与RustFS2 小时前
GPU 在空转等数据?PyTorch 训练集进 RustFS 的三种接法
后端·docker·云原生
4SAPI2 小时前
电商全链路内容自动化生成大模型 API 生产选型指南:4SAPI、硅基流动与 OpenRouter 的架构权衡
运维·人工智能·架构·自动化·1024程序员节
Leo.yuan3 小时前
数据准备工具进入自动化时代:7款产品的实际使用场景与选择建议
运维·自动化
吴建旭 智宅焕3 小时前
智能家居全国交付模式选型架构设计:连接型与兜底型的决策矩阵与匹配逻辑
运维·智能家居·devops