
简介Harbor是企业级容器镜像仓库的代表实现而面向ARM64环境的Harbor 2.8.2离线安装包则专门用来解决arm64服务器在无外网或内网隔离条件下部署镜像仓库的难题。资源适合承担边缘计算、物联网或信创业务交付的运维与开发人员能够避开在线安装时依赖源不可用、版本不一致等问题短时间内完成Harbor服务的安装并直接使用权限控制、镜像复制、漏洞扫描等核心功能。相比在线安装离线包将镜像与脚本一并打包让整个部署过程更可控、更可重复。压缩包约639.65MB共计6个文件包括shell安装与准备脚本、配置文件模板、离线镜像包、许可证等基本覆盖了从环境检查、配置生成到镜像导入与启动的完整流程。目前已有254人学习下载说明该离线包对arm64内网部署有实际参考价值拿到后只需解压并按手册调整配置即可省去大量排错成本。 最近在 ARM 服务器上部署 Harbor 镜像仓库直接拿harbor-offline-installer-v2.8.2-arm64.tar.gz这个离线包一把梭中间也踩了不少坑。Harbor 是很多人都在用的企业级镜像仓库能管项目、管权限、做镜像复制但真正让它跑起来反而是最容易被低估的环节。尤其当你的服务器是 arm64 架构又处在内网环境离线包基本是唯一省心的选择。这篇就围绕这个离线包从“为什么非要用离线包”讲起再到里面到底装了什么、如何去改配置、完整安装验证最后把我在 ARM 环境里遇到过的典型问题整理成一个速查清单。内容不绕弯子基本是照着可以直接复现的路径来写适合正在做内网容器镜像管理、需要跑在国产 ARM 平台或树莓派、鲲鹏这类设备上的朋友参考。1. 为什么 ARM 环境一定要用离线包来装 Harbor1.1 在线安装看着省事实际坑不少在 arm64 服务器上装 Harbor很多时候第一反应是直接跑官方脚本在线拉镜像。但真正做下来你会发现内网没有外网连接docker pull直接卡死就算能联网默认镜像源拉下来的很可能还是 amd64 的镜像在 arm64 上一点用没有。我还遇到过更隐蔽的问题docker daemon 本身没问题但 Harbor 依赖的一些基础镜像没有 arm64 版本或者 tag 比较旧拉取后架构标注的是unknown/unknown。这个时候再回头找离线包往往已经浪费了大半天。离线安装的好处就是把所有需要用到的镜像提前打包成一个 tar.gz内网环境直接解压、导入、启动不需要跟外网打交道。harbor-offline-installer-v2.8.2-arm64.tar.gz这个包就是官方针对 arm64 架构打的完整离线安装包里面不光有安装脚本和配置文件模板还塞好了 Harbor 各个组件core、portal、registry、postgresql、redis 等的 ARM 版镜像。在信创、军工、企业内网这类环境下这个包基本是唯一省心的方式。1.2 v2.8.2 这个版本怎么选选择 v2.8.2 不是随手拿最新版。Harbor 的版本迭代比较快2.8.x 属于成熟稳定的 2.x 分支社区活跃度高补丁也多。相比 2.5 之前的版本2.8 在 OCI 支持、P2P 预热、回收策略调度等细节上都更完善同时没有 2.9、2.10 那些新增模块带来的额外复杂度。对大多数想稳定跑镜像仓库的团队来说v2.8.2 是一个很均衡的版本。文件名里的arm64必须重点看。Harbor 官方从 2.7 开始对 ARM64 的打包就非常规整了下载页面会同时提供amd64和arm64两种离线包。你要是眼神不好拿错成了 amd64 包在 ARM 机器上能解压但 prepare 阶段很容易报exec format error因为脚本里面带着的是 x86 的二进制。所以拿到包第一件事就是uname -m确认输出是aarch64再对应去选 arm64 离线包。2. 离线包的工程细节别急着解压先搞懂它内部结构2.1 解压后到底有哪些东西先看这个 tar.gz 的体积v2.8.2 的 arm64 离线包一般接近 700MB 到 1GB 左右因为镜像比较多压缩后也不会太小。解压之后进入harbor目录你大概会看到这些核心内容install.sh官方安装入口脚本负责环境检查、加载镜像、生成配置、调用 docker compose 启动服务。harbor.yml.tmpl配置模板安装前要复制成harbor.yml并修改关键项。common.sh被 install.sh 引用的公共函数库建议不要动。harbor.v2.8.2.tar.gz真正的离线镜像包里面包含了 Harbor 全部依赖镜像的 archive 文件。LICENSE、README常规说明文件。很多人在这一步容易犯一个错下载完直接解压然后看到有一堆文件不知道要先改配置就着急跑./install.sh。结果脚本会用默认配置hostname 是reg.mydomain.com端口 80去启动跑起来之后发现访问不了又得重新 down 掉再改配置很折腾。正确顺序是先改配置再执行安装。2.2 前置依赖和配置规划离线包不是免安装的底层还是要依赖 docker engine 和 docker compose。ARM 环境常见的操作系统是 Ubuntu 22.04.5、Debian 11/12、openEuler、麒麟 V10、统信 UOS 这类安装之前先确认这些前置条件Docker Engine 20.10 以上并且 daemon 正常运行Docker Compose V2 插件可用直接执行docker compose version如果提示没有需要装docker-compose-plugin包内存建议至少 4GB官方推荐 8GB。Harbor 一启动就是一堆容器postgres、redis、registry、core、portal、jobservice、nginx 等加起来非常吃内存2GB 的机器启动后大概率被 OOM磁盘要有足够空间包括镜像数据目录、日志和数据库。如果打算长期使用建议单独挂一块数据盘给data_volume指定路径端口 80 或 443 不能占用除非后面改自定义端口根据我的经验在配置规划上最容易忽略的是数据卷路径。默认的data_volume: /data会在启动时创建一堆子目录包括database、registry、secret、ca_download等。如果系统盘不够大一定提前改成一个独立数据盘挂载点比如/data/harbor避免后期存了大量镜像之后磁盘撑爆。3. 手把手实操从修改 harbor.yml 到跑起 Harbor3.1 环境检查和下载校验安装前先花两分钟做环境检查这是避免后面出幺蛾子的最便宜的方式。逐个执行# 查看 CPU 架构确认是 aarch64 uname -m # 查看系统版本记录 OS 详细信息 cat /etc/os-release # 确认 docker daemon 正常 docker version # 确认 docker compose v2 可用 docker compose version镜像包建议下载到固定目录比如/opt/install/harbor-offline-installer-v2.8.2-arm64.tar.gz下载完务必做 SHA-256 校验。官方发布页面会给对应的 checksum我用的是echo 下载页显示的校验值 /opt/install/harbor-offline-installer-v2.8.2-arm64.tar.gz | sha256sum -c -如果校验不通过多半是下载中断或镜像源劫持直接重新下载不要硬着头皮装否则后面镜像导入阶段很容易出现docker load: unexpected EOF这类问题。解压cd /opt/install tar -xzf harbor-offline-installer-v2.8.2-arm64.tar.gz cd harbor这时候目录里只有harbor.yml.tmpl把它复制成harbor.yml再开始改。3.2 修改 harbor.yml 最关键的三处打开harbor.yml之后不需要动的配置尽量别动但下面这几处是必须确认的。第一处是hostname。这里不要写localhost也不要写127.0.0.1最好写成这个服务器的内网 IP 或一个能被客户端解析的域名。因为 Docker 客户端做 registry login 的时候会用这个 hostname 来拼接镜像地址如果写 localhost其他机器推镜像根本没法引用。第二处是协议和端口。默认模板里http.port: 80是注释掉的但如果你只打算在信任内网使用不配 HTTPS 也完全可以就打开http段把 80 端口解开。如果企业要求所有仓库走 HTTPS需要准备证书把 https 段的port: 443、certificate:、private_key:都写清楚。这里有个经验Harbor 的配置是harbor.yml一份配置同时管理 HTTP 和 HTTPS可以同时开启两个协议但建议至少关掉一个或者明确好主用协议否则客户端经常出现“第一个要求用的是 http第二个要求用的是 https”的情况。实际部署中我最常用的是先配好 https再用 docker login 测试避免后面因为 insecure-registry 问题来回排查。第三处是harbor_admin_password。默认密码是Harbor12345首次登录后建议立刻改掉。如果你计划用脚本自动初始化也可以在安装前就改成自己的初始密码。不过千万注意这个密码只在首次部署时生效如果已经初始化过再改 yml 里的密码是不会覆盖数据库里的密码的。给一个比较典型的 HTTP 端口部署配置片段hostname: 192.168.10.20 http: port: 80 # https: # port: 443 # certificate: /your/cert.pem # private_key: /your/key.pem harbor_admin_password: YourStrongPassword123 data_volume: /data/harbor log: level: info local: rotate_count: 15 rotate_size: 200M location: /var/log/harbor改完配置文件之后先不要急着跑 install.sh。可以用docker compose config来校验其实安装目录还没有 docker-compose.yml需要 install.sh 先生成。所以我一般是直接执行./install.sh但它会先跑prepare如果 harbor.yml 格式有问题会直接报错到时再根据报错改。3.3 执行安装与验证安装命令非常简单sudo ./install.sh脚本执行的过程大致如下检查 docker、docker compose、python 版本等环境解压harbor.v2.8.2.tar.gz用docker load把所有镜像载入本地 Docker基于harbor.yml生成docker-compose.yml和各类组件配置拉起来所有容器并设置开机自启默认会写入 systemd。首次安装时docker load阶段最费时间尤其在大内网环境下几百 MB 的镜像加载需要一点耐心。看到类似Loaded image: goharbor/harbor-core:v2.8.2的提示就说明镜像加载成功了。然后脚本会输出✔ ----Harbor has been installed and started successfully.----到这一步基本就成了。验证我一般分三层做# 第一层看容器状态 docker ps --format table {{.Names}}\t{{.Status}}\t{{.Ports}} # 第二层看端口监听 ss -lntp | grep -E :80|:443浏览器打开http://192.168.10.20能看到 Harbor 的登录页用 admin 和刚才设置的密码登录说明 Web 层正常。接着从客户端验证真正走 Docker 协议docker login 192.168.10.20 # 输入用户名和密码看到 Login Succeeded 就成功再随便打个镜像推上去验证。比如docker pull nginx:latest docker tag nginx:latest 192.168.10.20/library/nginx:test docker push 192.168.10.20/library/nginx:test推送成功后在 Harbor 页面的library项目里能看到这个镜像整个离线安装流程就算闭环了。4. 实际踩坑记录ARM Harbor 离线安装常见问题4.1 问题速查表我在部署过程中和帮别人排查时遇到最多的就是下面几个问题直接写成速查表方便对照问题现象可能原因解决办法docker login报http: server gave HTTP response to HTTPS client客户端默认用 HTTPS 请求 registry而 Harbor 只开了 HTTP客户端在/etc/docker/daemon.json中把 IP 加入insecure-registries然后systemctl restart docker浏览器访问提示证书不信任自签证书没安装到客户端或 CA 路径不对下载 Harbor 提供的ca.crt在客户端系统信任库中导入安装时内存不足postgres 或 registry 容器频繁重启物理内存或 swap 不足至少保证 4GB 可用内存或调整docker-compose.yml中相关容器的内存限制exec format error离线包架构不匹配AMR 机器用了 amd64 的包确认uname -m为aarch64重新下载 arm64 包80 端口被占用nginx、其他 web 服务占用修改harbor.yml的 http.port 为 8080 等或者停掉冲突服务install.sh 提示Cannot find docker compose系统没装 compose v2 插件安装docker-compose-plugin验证docker compose version登录后创建项目报 500数据库初始化异常或磁盘权限问题检查docker compose logs core并确认data_volume目录属主4.2 排障思路和常用命令遇到 Harbor 服务起不来第一件事不是删掉重装而是看日志。目录切到 harbor 安装目录用 docker compose 统一看所有服务的日志cd /opt/install/harbor sudo docker compose ps sudo docker compose logs -f --tail200 core如果某个组件一直异常退出单独看它sudo docker compose logs --tail100 postgresql改完配置之后要重新加载不是改完 harbor.yml 重启容器就生效的必须重新跑一次 prepare 再 up。最稳的做法是sudo docker compose down -v sudo ./install.sh注意-v会连数据卷一起删掉慎用只有确认数据库可以重建的测试环境才这么干。生产环境恢复数据优先用备份而不是靠重装。还有两个场景值得单独说一下。一是很多朋友在 x86 开发机上用 QEMU 模拟 arm64 环境跑这个离线包做验证docker build和docker load能跑通但 qemu 模拟的 ARM 性能比较差Harbor 这类多容器服务启动非常慢甚至会出现超时假死。所以我建议模拟环境只做验证不要拿它做性能测试真正要上线还是得用物理 ARM 服务器或云上的 ARM 实例。二是在一些国产 Linux 发行版上比如麒麟 V10、统信 UOSdocker 的 socket 路径、systemd 服务名可能略有差异安装前先把docker info和systemctl status docker看一下少走弯路。另外关于http 协议改成 https这件事我个人的建议是如果公司安全要求严格在第一次部署时就把https配好不要先 HTTP 用着以后再改。中途切换协议不仅麻烦客户端还要重新改 insecure-registry 配置、信任新证书期间比较容易出现误判“Harbor 挂了”的假故障。第一次就把证书配置到位后面能少很多事。最后再分享一个我自己的习惯每次部署完我都会把harbor.yml和安装包版本、校验值、部署时间记到一个变更记录里把默认密码也强制换掉。后续版本升级时对比记录里的差异能省不少排查时间。这套流程我至少帮团队避免了三次“部署完想不起来配置是什么”的尴尬。本文还有配套的精品资源点击获取