
简介这份资源是面向ARM64架构环境的Harbor容器镜像仓库离线安装包对应Harbor v2.8.2版本适合在边缘计算、物联网及国产化ARM服务器等场景下部署私有镜像仓库的运维与开发人员使用。当目标主机无外网或网络受限时该离线包可帮助用户绕过在线拉取依赖的环节直接完成Harbor服务的安装与初始化。压缩包共包含6个文件以2个sh安装脚本、1个gz镜像归档、1个license许可文件、1个prepare预处理脚本和1个tmpl配置模板为主整体约639.65MB覆盖了从环境准备、镜像导入到服务配置的完整流程。目前已有261人学习下载可作为ARM平台搭建企业级镜像仓库的参考。借助其中的配置模板与安装脚本读者能够快速理解Harbor在ARM架构下的部署结构与参数组织方式减少因架构差异带来的适配成本提升私有仓库的落地效率。1. arm64 离线部署 Harbor为什么 v2.8.2 这个包值得单独拎出来讲在信创、边缘机房、内网 CI 这类场景里arm64 服务器上装 Harbor 是个高频需求但真正卡住人的往往不是 Harbor 本身而是那个harbor-offline-installer-v2.8.2-arm64.tar.gz到底怎么落地。x86 上大家习惯了docker compose up -d一把梭换到 arm 架构镜像拉不动、compose 版本对不上、证书自签被拒一连串问题会集中爆发。这个离线包的价值就在于它把 Harbor 全部组件镜像和安装脚本打包在一起不依赖外网 registry特别适合内网、隔离网、arm 云主机这类环境。适合谁一是要在 arm 服务器上搭私有镜像仓库的运维二是做 arm 镜像分发、需要本地 registry 的 CI 工程师三是搞 arm 验证、需要一套稳定 registry 做基准的测试同学。下面按「包怎么拆 → 环境怎么备 → 怎么装 → 怎么排错 → 怎么进阶」讲透。2. 拆开离线包v2.8.2 arm64 里到底装了什么拿到harbor-offline-installer-v2.8.2-arm64.tar.gz之后别急着解压就装。先搞清楚这个包的结构后面排错才有方向。离线包本质上是「安装器 全部组件镜像 tar」的组合解压后你会看到harbor/目录、prepare脚本、install.sh、harbor.yml.tmpl以及一个装着所有镜像的harbor.v2.8.2.tar.gz。理解这层结构才能判断某次失败是镜像没导入还是配置写错了。2.1 离线包的目录结构与各文件职责解压后典型结构如下不同小版本文件名略有差异但职责一致tar -xzf harbor-offline-installer-v2.8.2-arm64.tar.gz cd harbor ls -lh # 常见内容 # harbor.v2.8.2.tar.gz 所有组件镜像的离线 tar # harbor.yml.tmpl 配置模板必须复制成 harbor.yml 再改 # prepare 生成 docker-compose.yml 的预处理脚本 # install.sh 主安装脚本 # common.sh 公共函数库harbor.v2.8.2.tar.gz是核心里面打包了harbor-core、harbor-portal、harbor-jobservice、registry、registryctl、redis、postgresql、nginx、trivy等镜像。install.sh会先调prepare生成docker-compose.yml再docker load导入镜像最后docker compose up -d拉起服务。注意 v2.8.2 用的是docker composev2 插件语法不是老的docker-compose这点在 arm 机器上尤其容易翻车。2.2 先确认 arm64 环境内核、Docker、Compose 三件套装之前把三件事确认清楚能省掉后面一半的排查时间。# 1. 确认 CPU 架构必须是 aarch64 uname -m # 期望输出aarch64 # 2. 确认 Docker 已装且能跑 docker version docker info | grep -i storage driver # 3. 确认 compose v2 插件可用 docker compose version # 期望Docker Compose version v2.x.x参数说明uname -m返回aarch64才说明是 arm64如果返回x86_64说明你拿错机器了离线包里的镜像全是 arm64 的导入后跑不起来。docker info里的 storage driver 常见是overlay2如果是vfs性能会很差建议换掉。docker compose version如果报docker: compose is not a docker command说明你装的是老版docker-compose二进制需要单独装 compose v2 插件否则install.sh直接失败。提示很多 arm 发行版如麒麟、openEuler自带的 Docker 版本偏旧建议先升级到 20.10 以上compose 插件单独装。2.3 离线包与在线安装的差别为什么内网必须用它在线安装 Harbor 时install.sh会去 Docker Hub 拉镜像内网直接卡死。离线包把这一步替换成docker load从本地 tar 导入完全不碰外网。差别体现在三点一是镜像来源离线包用本地 tar在线走 registry二是网络依赖离线包只需本机 Docker daemon三是版本一致性离线包里的镜像版本和harbor.yml是配套的不会出现拉到的镜像和配置不匹配。这也是为什么标题里强调「离线包」——在 arm 内网环境它几乎是唯一稳妥的路径。3. 从零装起来harbor.yml 配置与 install.sh 执行这一章是核心操作。装 Harbor 的成败八成取决于harbor.yml写得对不对剩下两成是镜像导入和端口冲突。下面按顺序走一遍每一步都给可抄的命令和参数解释。3.1 生成 harbor.yml 并改四个必调参数harbor.yml.tmpl是模板必须先复制再改直接改模板会导致prepare报错。cp harbor.yml.tmpl harbor.yml vim harbor.yml重点改这几处# 1. 访问地址写 arm 服务器的 IP 或域名 hostname: 192.168.209.133 # 2. HTTP 端口默认 80被占用就换 http: port: 80 # 3. HTTPS 配置内网测试可以先注释掉整段 # https: # port: 443 # certificate: /your/certificate/path # private_key: /your/private/key/path # 4. 数据目录和管理员密码 data_volume: /data/harbor harbor_admin_password: Harbor12345参数说明hostname必须写成客户端能访问到的地址写localhost会导致别的机器 push 失败报dial tcp 192.168.209.133: connect: connection refused这类错往往就是这里没对上。http.port如果 80 被 nginx 占了改成 8080 之类但记得后面 push 要带端口。https段内网自签证书容易踩坑测试阶段建议先注释用 HTTP 跑通再上 TLS。data_volume是镜像和数据库落盘位置arm 机器磁盘小的话提前规划。3.2 执行 prepare 与 install.sh 的完整流程配置改完按顺序执行# 1. 预处理生成 docker-compose.yml sudo ./prepare # 2. 正式安装导入镜像并启动 sudo ./install.sh # 3. 查看容器状态 sudo docker compose psprepare会读取harbor.yml生成docker-compose.yml同时校验配置合法性。如果这一步报Cannot connect to the Docker daemon说明没用 sudo 或 Docker 没起。install.sh会先docker load -i harbor.v2.8.2.tar.gz导入所有镜像再docker compose up -d。导入过程在 arm 机器上可能持续几分钟别以为卡死了。docker compose ps里所有容器状态应为Up或healthyharbor-core和harbor-db启动最慢等 1-2 分钟再看。3.3 验证安装登录、打标签、推送一条龙装完必须验证否则等于没装。# 1. 浏览器或 curl 访问 curl -I http://192.168.209.133 # 2. 命令行登录 docker login 192.168.209.133 -u admin -p Harbor12345 # 3. 给本地镜像打标签并推送 docker tag nginx:latest 192.168.209.133/library/nginx:test docker push 192.168.209.133/library/nginx:test参数说明docker login如果报http: server gave HTTP response to HTTPS client说明你用的是 HTTP 但 Docker 默认走 HTTPS需要在/etc/docker/daemon.json里加insecure-registries{ insecure-registries: [192.168.209.133] }改完systemctl restart docker再登录。docker push报dial tcp 192.168.209.133: connect: connection refused多半是 Harbor 没起来或端口不对先docker compose ps确认。推送成功后在 Harbor Web 界面能看到library/nginx仓库说明整条链路通了。4. arm64 装 Harbor 的避坑清单5 个血泪现场这一章全是踩过的坑每条按「现象 → 原因 → 解决」写照着排查能省大量时间。4.1 镜像导入后容器起不来日志报 exec format error现象docker compose up -d后容器反复重启docker logs看到exec format error。 原因镜像架构不对x86 镜像被导到 arm64 机器上或者离线包本身拿错了架构。 解决docker inspect image | grep Architecture确认是arm64。如果显示amd64说明你下的不是 arm64 版离线包重新获取harbor-offline-installer-v2.8.2-arm64.tar.gz。4.2 prepare 报错 Cannot connect to the Docker daemon现象执行./prepare直接报无法连接 Docker daemon。 原因没用 root 权限或 Docker 服务没启动或当前用户不在 docker 组。 解决sudo ./prepare或systemctl start docker后重试。确认docker info能正常输出。4.3 push 报 https 相关错误明明配的是 HTTP现象docker push报server gave HTTP response to HTTPS client。 原因Docker 客户端默认对非 localhost 走 HTTPSHarbor 配的是 HTTP。 解决在/etc/docker/daemon.json加insecure-registries重启 Docker。生产环境建议直接上 TLS别长期用 insecure。4.4 端口 80 被占用导致 nginx 容器起不来现象docker compose ps里 nginx 容器Exit日志报bind: address already in use。 原因宿主机 80 端口被其他服务如系统自带 nginx、apache占用。 解决ss -tlnp | grep :80找到占用进程停掉或改 Harbor 的http.port为 8080重新prepare和install.sh。4.5 磁盘写满导致 postgresql 容器崩溃现象用一段时间后 Harbor 无法登录harbor-db容器挂掉。 原因data_volume所在分区写满postgresql 无法写入。 解决df -h确认分区清理旧镜像或迁移data_volume到大盘。arm 边缘设备磁盘普遍偏小建议一开始就把数据目录挂到大容量分区。5. 进阶离线包升级、镜像清理与 arm 验证技巧装完只是开始长期用还得会升级和清理。Harbor 版本升级在离线场景下有个固定套路下载新版离线包停旧服务导入新镜像迁移数据库再起新服务。关键是数据库迁移不能跳版本v2.8.2 升到更高版本时先确认官方支持的升级路径别直接跨大版本。操作上先docker compose down停掉旧 Harbor备份data_volume里的数据库目录再用新离线包的prepare和install.sh覆盖安装install.sh会自动执行数据库迁移。升级前务必备份这是后悔药。镜像清理方面Harbor 自带垃圾回收但 arm 环境下建议定期手动触发# 进入 harbor-db 容器执行 GC或通过 Web 界面触发 docker exec -it harbor-db psql -U postgres -d registry # 更推荐在 Web 界面系统管理 - 垃圾清理 - 立即清理参数说明GC 会删除没有被任何 tag 引用的 blob释放磁盘。执行前确认没有正在进行的 push否则可能误删。arm 机器磁盘紧张时还可以在harbor.yml里配置storage_service的保留策略按 tag 数量或天数自动清理。做 arm 验证时我习惯用 Harbor 当本地基准 registry把待测镜像先 push 进去再拉出来验证镜像完整性和架构正确性。一个实用技巧是docker manifest inspect查看镜像支持的架构确认是 arm64 再推。另外如果要在多台 arm 机器间同步镜像可以用 Harbor 的复制策略配置目标 registry 后自动同步省去手动 push。最后说个习惯每次装完 Harbor我都会把harbor.yml、docker-compose.yml和当时的docker compose ps输出存一份到/root/harbor-backup/下次出问题直接对比比翻日志快得多。arm 环境变数多留好现场记录就是给自己留退路。希望帮到你。本文还有配套的精品资源点击获取