Harbor v2.13.1 ARM64离线部署实战:内网镜像仓库搭建与避坑指南
简介本资源为 Harbor 最新 v2.13.1 的 ARM64 架构离线安装包面向在 ARM64 服务器或 Kubernetes 集群上部署私有镜像仓库的运维与开发人员解决国产化平台、信创环境及边缘节点无法直接拉取官方 x86 安装包的问题。压缩包共 6 个文件以 shell 安装脚本、配置文件模板、镜像归档及许可证说明为主整体约 679MB其中镜像归档承载核心组件脚本与模板负责初始化与参数定制可在无外网环境下完成一键部署。目前已有 528 人学习下载适合需要快速搭建 ARM64 私有仓库、研究 Harbor 离线安装机制或进行版本升级的读者参考。资源持续跟进官方最新版本便于对照官方文档完成配置调优与故障排查。1. 从一次内网部署翻车说起为什么我盯上了 Harbor v2.13.1 的 ARM64 离线包上个月帮一个做边缘计算的朋友救火他们机房清一色 ARM64 服务器想在内网搭一套镜像仓库给 Kubernetes 集群用。结果从官方渠道拉镜像要么架构不对跑不起来要么依赖一堆外网地址内网根本拉不动。折腾两天最后靠一份 Harbor v2.13.1 的 ARM64 离线安装包才把局面稳住。这件事让我意识到ARM64 场景下的镜像管理和 x86 那套经验真不是一回事。Harbor 本身是 CNCF 毕业的容器镜像仓库项目做的是镜像存储、权限控制、漏洞扫描、镜像复制这些事。而这份资源的核心价值就三点版本是 v2.13.1、架构是 ARM64、形态是离线安装包。翻译成人话就是——你不需要在目标机器上联网拉一堆镜像解压、改配置、跑脚本一套内网镜像仓库就起来了。适合谁在 ARM64 服务器或国产化平台上跑 Kubernetes、又要求镜像不出内网的运维和平台工程师。如果你手上是 x86 机器这份包不是给你准备的别下错了。2. 离线包拆开看ARM64 架构下 Harbor 的组件构成与选型逻辑2.1 离线安装包到底装了什么先把包解开看结构这是判断一份离线包靠不靠谱的第一步。Harbor 的离线包本质是一个自包含的部署套件核心目录大致长这样tar -xzf harbor-offline-installer-v2.13.1-arm64.tgz cd harbor ls -la你会看到几个关键文件harbor.v2.13.1.tar.gz是全部组件镜像的打包harbor.yml.tmpl是配置模板install.sh是安装入口prepare负责生成 docker-compose 编排文件。注意那个harbor.v2.13.1.tar.gz它才是离线能力的来源——里面塞了 registry、portal、core、jobservice、db、redis、trivy 等一堆镜像安装时用docker load一次性灌进本地。为什么 ARM64 要单独出包因为镜像里的二进制是编译好的x86 的镜像层在 ARM64 上根本执行不了。很多人以为 Docker 镜像跨架构通用这是最大的误解。镜像 manifest 里带着架构信息docker pull时如果本地是 ARM64 而仓库只有 amd64要么报no matching manifest要么拉下来跑就exec format error。所以这份 ARM64 离线包的价值就在于所有组件镜像都是原生 ARM64 构建的省掉了你自己交叉编译或找替代镜像的麻烦。2.2 组件清单与资源占用预估在动手前先对这套东西吃多少资源有个数不然装到一半磁盘满了很尴尬。下面是 v2.13.1 默认部署下的主要组件和大致占用组件作用镜像大小量级内存占用harbor-core核心 API 与业务逻辑百 MB 级中等harbor-portalWeb 前端较小低harbor-registry镜像存储后端中等中等harbor-jobservice复制、扫描等异步任务中等中等harbor-dbPostgreSQL 元数据库中等中等redis缓存与会话小低trivy漏洞扫描较大较高磁盘上光镜像包解压加加载后建议预留至少 40GB 起步因为后续你还要往里推镜像。内存方面2GB 能跑起来但会紧4GB 以上比较舒服8GB 可以开扫描。CPU 核心数不是瓶颈ARM64 平台常见的是 4 核或 8 核够用。提示如果你的 ARM64 机器是那种内存只有 2GB 的轻量实例装之前先把 trivy 扫描关掉否则 jobservice 容易因为内存不足反复重启。2.3 为什么选离线而不是在线安装在线安装脚本会去 Docker Hub 或指定 registry 拉镜像内网环境直接卡死。离线包把这一步前置了安装过程只跟本地 Docker daemon 打交道。对于 Kubernetes 集群的镜像仓库来说这还有个额外好处整个部署过程可重复、可审计不会因为某天外网镜像 tag 变了导致重装失败。我一般给内网项目做交付优先选离线包图的就是确定性。3. 从解压到登录ARM64 离线部署的完整操作链路3.1 前置检查Docker 与 docker-compose 的版本底线Harbor v2.13.1 对运行环境有要求ARM64 上尤其要注意 Docker 版本别太老。先确认docker version --format {{.Server.Version}} docker compose versionDocker 建议 20.10 以上docker compose 用 v2 插件形式docker compose而不是docker-compose。v2.13.1 的 install.sh 已经适配 compose v2如果你系统里只有老的 python 版 docker-compose可能报命令找不到。ARM64 的 Docker 安装包现在主流发行版都有装完记得把当前用户加进 docker 组不然 install.sh 里一堆 sudo 很烦。sudo usermod -aG docker $USER newgrp docker这一步不做后面docker load会提示权限拒绝属于新手最常见的翻车点。3.2 配置 harbor.ymlARM64 场景下必须改的几个参数复制模板再改别直接改 tmplcp harbor.yml.tmpl harbor.yml vim harbor.yml重点看这几处。hostname填你机器的实际 IP 或内网域名别用 localhost否则 Kubernetes 节点拉镜像时解析不到。http.port默认 80如果被占用改成别的。harbor_admin_password设一个强密码默认的 Harbor12345 上线就是安全隐患。data_volume指向一个大盘路径别放系统盘。database.password和redis相关如果没特殊需求保持默认即可。如果要开 HTTPS把https段取消注释并配好证书路径内网自签也行但记得把 CA 分发给所有 Kubernetes 节点否则 kubelet 拉镜像会报证书错误。ARM64 平台上的证书和 x86 没区别别被架构吓到。hostname: 192.168.1.100 http: port: 80 harbor_admin_password: YourStrongPass data_volume: /data/harbor改完保存。这里有个血泪经验harbor.yml里缩进是空格别用 TabYAML 解析器对 Tab 零容忍报错信息还特别含糊。3.3 执行安装install.sh 背后发生了什么sudo ./install.sh --with-trivy不带参数就装基础组件加--with-trivy会启用漏洞扫描。脚本执行时依次做几件事先调prepare读取 harbor.yml 生成docker-compose.yml然后docker load把harbor.v2.13.1.tar.gz里的镜像逐个加载最后docker compose up -d拉起所有容器。整个过程不需要外网这就是离线包的意义。安装完用docker compose ps看状态所有服务应该是 Up 或 healthy。如果某个容器反复重启先docker compose logs 服务名看日志。ARM64 上最常见的是 db 初始化慢导致 core 起不来等一两分钟再刷新通常就好了。3.4 验证与首次推送镜像浏览器打开http://你的hostname用 admin 和你设的密码登录。能进 dashboard 说明核心链路通了。接着验证推送docker login 192.168.1.100 docker tag nginx:latest 192.168.1.100/library/nginx:arm64 docker push 192.168.1.100/library/nginx:arm64注意Harbor 默认要求先创建项目projectlibrary是默认存在的公共项目。推之前确认你的 nginx 镜像是 ARM64 的用docker inspect看 Architecture 字段。推一个 amd64 镜像进去Kubernetes 节点拉下来照样跑不起来这个坑我在第 4 章细说。4. 避坑与排查ARM64 离线部署里最容易翻车的五件事4.1 镜像加载后容器起不来报 exec format error现象docker compose up后容器秒退日志里出现exec format error或standard_init_linux.go相关报错。原因加载进来的镜像架构和宿主机不匹配。虽然这份包号称 ARM64但如果你之前本地 Docker 里残留了同名 amd64 镜像docker load可能没覆盖干净或者你误用了 x86 的包。解决先docker image inspect 镜像 | grep Architecture确认是 arm64。如果是 amd64docker rmi清掉再重新docker load。另外确认uname -m输出是aarch64或arm64别在 x86 机器上装 ARM64 包方向反了。4.2 Kubernetes 节点拉镜像报证书或解析错误现象Pod 一直 ImagePullBackOffdescribe 看到x509: certificate signed by unknown authority或no such host。原因Harbor 用了自签 HTTPS 证书节点不信任或者 hostname 配的是 localhost节点解析不到。解决把 Harbor 的 CA 证书放到每个节点的/etc/docker/certs.d/你的hostname/ca.crt然后重启 docker。hostname 必须用节点能访问到的 IP 或域名。如果图省事用 HTTP需要在每个节点的 docker daemon 配置里把该地址加进insecure-registries但生产环境不建议这么干。4.3 磁盘写满导致 registry 拒绝推送现象推送镜像推到一半报no space left on device或者 registry 容器 unhealthy。原因data_volume指向的分区满了。Harbor 的镜像存储、数据库、日志都吃这个盘镜像一多涨得很快。解决df -h确认分区把data_volume迁到大盘。迁移时先docker compose down改 harbor.yml 里的路径再install.sh重跑。日常可以配镜像保留策略在 Web 界面里设置按 tag 数量或天数清理别等满了才救火。4.4 漏洞扫描一直卡在 pending现象镜像推上去了扫描任务永远排队trivy 容器 CPU 或内存飙高。原因ARM64 上 trivy 的漏洞库更新和扫描比较吃资源内存不足时任务会卡死。解决给机器加内存或者关掉自动扫描改为手动触发。也可以在 harbor.yml 里调 jobservice 的并发数降低同时扫描的任务量。轻量 ARM64 实例上扫描功能属于奢侈品量力而行。4.5 升级或重装后数据丢失现象重跑 install.sh 后之前推的镜像和用户全没了。原因docker compose down时如果带了-v或者手动删了数据卷数据库和镜像存储就一起没了。Harbor 的数据默认存在data_volume和 Docker volume 里重装脚本本身不会主动删但操作顺序错了就会丢。解决升级前先备份data_volume整个目录和数据库。重装时用docker compose down不带-v保留卷。养成习惯动 Harbor 之前先docker compose down停服务备份再操作。后悔药这东西Harbor 不卖。5. 进阶技巧把 Harbor 接进 Kubernetes 与镜像保留策略5.1 在 Kubernetes 里创建 imagePullSecretHarbor 跑起来只是第一步让 Kubernetes 集群能用它才是目的。私有项目需要认证先在 Harbor 里建一个机器人账号robot account拿到 token然后在集群里建 secretkubectl create secret docker-registry harbor-cred \ --docker-server192.168.1.100 \ --docker-usernamerobot$yourproject \ --docker-password生成的token \ --namespacedefault建完在 Deployment 的spec.imagePullSecrets里引用harbor-cred。机器人账号的好处是权限可控、可轮换比直接用 admin 强得多。ARM64 集群里所有节点都要能访问 Harbor 地址网络策略别拦了。5.2 用保留策略控制镜像膨胀镜像仓库不管半年就能撑爆盘。Harbor 的 tag 保留策略在项目设置里配规则可以按「保留最近推送的 N 个」或「保留最近 N 天」。我一般给生产项目配「保留最近 10 个 tag 保留最近 30 天」两条规则取并集。配完先点「模拟运行」看会删哪些确认无误再启用。这个功能救过我好几次尤其是 CI 频繁推镜像的场景。5.3 验证离线包完整性的一个习惯最后说个我自己的习惯。每次拿到离线包先校验再解压sha256sum harbor-offline-installer-v2.13.1-arm64.tgz和来源提供的校验值对一下。传输过程损坏的包解压时可能不报错但docker load到一半失败排查起来很费劲。从那以后我每次部署前都强制走一遍校验宁可多花两分钟也不想到机房现场才发现包是坏的。希望帮到你。本文还有配套的精品资源点击获取