飞腾服务器离线部署Harbor v2.4.0 arm64全流程与避坑指南
简介面向需要在ARM架构服务器上私有化部署容器镜像仓库的运维与DevOps人员这份harbor-v2.4.0离线安装包解决了内网无外网、无法在线拉取镜像的部署难题。包内共6个文件以sh脚本、gz压缩包、yml配置、license许可及prepare准备文件为主涵盖安装脚本、镜像归档与配置模板整体约402.34MB解压后执行install.sh即可一键完成安装前置条件为已装好docker与docker-compose。目前已有1576人学习下载说明该版本在ARM环境下的实用性与关注度较高。借助其中的harbor.v2.4.0.tar.gz镜像包与harbor.yml配置样例读者可快速搭建带权限管理、镜像复制与漏洞扫描能力的私有仓库并参考common.sh与prepare脚本理解离线安装的目录结构与依赖准备逻辑减少在国产化或ARM服务器上反复试错的成本。1. 从一台飞腾服务器说起为什么 harbor-v2.4.0 离线装 arm 架构总翻车上个月帮某实验室的 A 同学处理一台飞腾服务器机器上跑着几个内部镜像仓库的迁移任务要求全程离线、架构是 aarch64。他之前照着 x86 的教程走docker load完镜像、docker-compose up -d一敲harbor-core 起来三秒就退出日志里全是exec format error。这不是玄学是 arm 架构下镜像 tag 没选对加上离线包里混进了 amd64 的组件。harbor-v2.4.0 这个版本在 arm 上离线部署坑集中在三处离线包架构、docker-compose 版本、以及 data volume 的权限。这篇笔记按我实际装过一遍的流程写从环境清单到验证跑通中间穿插几条血泪经验。适合正在内网、信创环境或边缘节点上折腾私有镜像仓库的开发者新手照着能走通熟手可以重点看版本取舍和排错那段。2. 装前把环境列清harbor-v2.4.0 在 arm 上到底要什么2.1 硬件与操作系统基线harbor-v2.4.0 官方对 arm64 的支持从 2.0 之后逐步完善但 2.4.0 这个版本对内核和文件系统仍有隐性要求。我一般会先确认三件事CPU 架构是aarch64而不是armv7l内核版本不低于 4.19根分区剩余空间不少于 40G。操作系统层面麒麟 V10 SP2、统信 UOS 20、Ubuntu 20.04 arm64 都实测能跑CentOS 7 的 arm 版因为内核太老docker 版本会被卡在 19.03后面 compose 文件里的version: 3.8会报兼容警告能跑但不推荐。内存方面harbor 全家桶core、portal、registry、redis、postgresql、trivy 等跑起来常驻大概 2.5G 到 3G官方写最低 4G我建议直接给 8G否则 trivy 扫描大镜像时容易 OOM。磁盘要单独挂一块给/data因为镜像层和数据库都往这里写系统盘被撑爆是新手最常见的翻车点。# 确认架构和内核输出必须是 aarch64 和 4.19 以上 uname -m uname -r # 看根分区和计划挂载的数据盘 df -hT | grep -E ext4|xfs # 确认 cgroup 是 v1 还是 v2harbor 2.4.0 在 cgroup v2 上需要额外参数 stat -fc %T /sys/fs/cgroup/上面三条命令里uname -m的输出如果是armv7l就直接换机器别浪费时间stat -fc %T /sys/fs/cgroup/返回cgroup2fs的话后面 docker 启动参数要加--exec-opt native.cgroupdriversystemd否则 harbor 的 portal 容器会反复重启。2.2 依赖组件版本对照离线安装最怕版本错配。harbor-v2.4.0 的离线包自带 docker 镜像但 docker 引擎和 docker-compose 需要自己提前装好。下面这张表是我在 arm 上验证过的组合直接抄组件推荐版本最低版本说明Docker Engine20.10.1719.03.9arm64 包要从对应源取docker-compose1.29.21.25.02.x 语法有差异2.4.0 不认containerd1.6.61.4.0随 docker 一起装openssl1.1.1k1.1.1生成证书用docker-compose 这里要特别说一句harbor-v2.4.0 的docker-compose.yml里写的是version: 3.8compose 2.x 虽然能解析但docker-compose命令本身在 2.x 变成了docker compose插件形式离线环境里插件装起来麻烦所以我一般锁 1.29.2。装完用docker-compose version确认输出是1.29.2不是的话后面prepare脚本会报unknown flag。# 下载 docker-compose 1.29.2 的 arm64 二进制离线环境提前拷进去 # 假设文件已经放在 /tmp/docker-compose-Linux-aarch64 cp /tmp/docker-compose-Linux-aarch64 /usr/local/bin/docker-compose chmod x /usr/local/bin/docker-compose # 验证版本必须是 1.29.2 docker-compose versionchmod x这步别漏漏了会提示Permission denied但报错信息不会直接告诉你是权限问题新手容易往别处查。docker-compose version输出里如果出现Docker Compose version v2.x说明系统里已经有 2.x 的插件需要把/usr/local/bin/docker-compose的优先级调到 PATH 最前或者直接删掉 2.x 的软链。3. 离线包落地harbor-v2.4.0 arm64 包的获取与解压3.1 离线包结构说明harbor 的离线安装包命名规则是harbor-offline-installer-v2.4.0.tgz但 arm 架构的包在官方发布页里和 x86 混在一起下载时一定要看清文件名里有没有arm64或aarch64字样。我拿到的包解压后目录结构是这样的harbor/ ├── harbor.v2.4.0.tar.gz # 所有组件的 docker 镜像 ├── harbor.yml.tmpl # 配置模板 ├── install.sh # 安装入口 ├── prepare # 环境预检脚本 └── common.sh # 公共函数harbor.v2.4.0.tar.gz这个文件是核心里面打包了 9 个镜像解压后docker load进去。如果这个包是 x86 的docker load不会报错但docker run时会提示exec format error这就是 A 同学遇到的那个现象。判断方法很简单docker load之后执行docker images | grep goharbor看镜像的ARCHITECTURE列是不是arm64。# 解压离线包 tar -zxvf harbor-offline-installer-v2.4.0-arm64.tgz -C /opt/ # 进入目录先别急着 install看一眼镜像包大小 ls -lh /opt/harbor/harbor.v2.4.0.tar.gz # 加载镜像这一步在 arm 上大概需要 2-3 分钟 docker load -i /opt/harbor/harbor.v2.4.0.tar.gz # 确认所有镜像都是 arm64 docker images --format {{.Repository}}:{{.Tag}}\t{{.Size}} | grep goharbordocker load的输出会逐层打印如果中途出现no space left on device说明/var/lib/docker所在分区不够需要先清理或迁移 docker 根目录。加载完成后docker images里应该能看到goharbor/harbor-core:v2.4.0、goharbor/registry-photon:v2.4.0等每个镜像的架构信息可以用docker inspect单独确认。3.2 配置 harbor.yml 的关键参数harbor.yml.tmpl复制成harbor.yml之后需要改的地方不多但每一处都影响能不能跑起来。我一般按下面这个顺序改# 复制模板 cp /opt/harbor/harbor.yml.tmpl /opt/harbor/harbor.yml # 编辑 harbor.yml重点改这几项 hostname: harbor.internal.lab # 改成实际访问的域名或 IP http: port: 80 # 内网用 80冲突就换 8080 https: # 离线内网没有证书就整段注释掉否则 prepare 会报错 # port: 443 # certificate: /your/certificate/path # private_key: /your/private/key/path harbor_admin_password: Harbor12345 # 首次登录密码装完可改 data_volume: /data # 必须提前建好目录并给权限 trivy: ignore_unfixed: false skip_update: true # 离线环境必须 true否则拉漏洞库失败hostname这一项如果填了域名客户端机器必须能解析否则docker login会报no such host。data_volume指向的目录要提前mkdir -p /data并chmod 750属主是 root因为 harbor 容器里以 root 跑。skip_update: true是离线环境的后悔药不设的话 trivy 启动时会尝试连外网更新漏洞库超时后整个 harbor-core 会卡在 starting 状态。提示harbor_admin_password如果留默认值装完后第一件事就是登录改掉内网也一样这是习惯问题。4. 执行安装prepare 与 install.sh 的完整流程4.1 prepare 脚本做了什么./prepare这个脚本会根据harbor.yml生成最终给 docker-compose 用的docker-compose.yml同时检查端口占用、目录权限、镜像是否已加载。在 arm 上跑的时候我遇到过两种报错一种是permission denied指向/data原因是目录属主不对另一种是port 80 already in use通常是系统里已经有 nginx 或 httpd 在跑。cd /opt/harbor # 先跑 prepare观察输出 ./prepare # 如果报端口占用查一下谁占了 80 ss -tlnp | grep :80 # 如果报 /data 权限问题重新给权限 chown -R root:root /data chmod 750 /data./prepare成功的话最后会输出Clean up the input dir和Generated configuration file: ./docker-compose.yml。这时候可以打开生成的docker-compose.yml看一眼确认里面所有镜像的 tag 都是v2.4.0没有混入dev或latest。如果prepare中途失败它不会自动回滚需要手动删掉生成的docker-compose.yml再重跑。4.2 install.sh 启动与首次启动观察./install.sh是最后一步它会调用docker-compose up -d把所有容器拉起来。在 arm 上首次启动大概需要 1 到 2 分钟因为 postgresql 要初始化数据库、registry 要建存储目录。启动过程中不要急着docker ps等脚本自己输出✔ ----Harbor has been installed and started successfully.----再操作。# 执行安装 ./install.sh # 安装完成后看容器状态所有容器应该是 Up 或 healthy docker-compose ps # 实时看 harbor-core 日志确认没有反复重启 docker-compose logs -f harbor-coredocker-compose ps的输出里harbor-db、harbor-redis、harbor-core这三个是关键任何一个状态是Exit或Restarting都说明有问题。harbor-core日志里如果出现failed to connect to database多半是harbor-db还没初始化完等 30 秒再docker-compose restart harbor-core即可。如果日志里出现exec format error回到第 3 章检查镜像架构。注意install.sh执行过程中如果中断不要直接重跑先docker-compose down -v清掉容器和 volume再重新./prepare ./install.sh否则残留的 volume 会导致数据库密码不一致。5. 避坑与排查arm 离线装 harbor 最常见的 5 个坑5.1 坑一镜像架构不匹配容器起不来现象docker-compose up -d之后harbor-core和harbor-portal反复重启docker logs里只有一行exec format error没有更多信息。原因离线包里的harbor.v2.4.0.tar.gz是 x86 版本docker load能成功是因为 docker 不校验架构但内核执行时发现指令集不对直接拒绝。解决重新获取 arm64 的离线包用docker inspect goharbor/harbor-core:v2.4.0 | grep Architecture确认输出是arm64。已经 load 进去的 x86 镜像用docker rmi删掉再重新 load。5.2 坑二data_volume 权限不对registry 写不进去现象harbor 能起来但docker push镜像时报received unexpected HTTP status: 500registry容器日志里写permission denied。原因/data目录属主是普通用户或者权限是 755registry 容器里以10000用户跑写不进去。解决chown -R 10000:10000 /data/registry或者简单点chmod 777 /data内网临时用可以长期还是按官方建议给 10000 用户。5.3 坑三docker-compose 版本过高语法不认现象./prepare报Unsupported config option for services: version或者unknown flag: --compatibility。原因系统里装的是 compose 2.x命令形式变成docker compose而 harbor 2.4.0 的脚本里写死了docker-compose。解决降级到 1.29.2或者建一个软链ln -s /usr/libexec/docker/cli-plugins/docker-compose /usr/local/bin/docker-compose并确保 PATH 优先级。5.4 坑四trivy 离线更新失败拖垮 core现象harbor-core一直处于starting状态日志里反复出现failed to download vulnerability database。原因harbor.yml里trivy.skip_update没设成true容器启动时尝试连外网。解决改harbor.yml里trivy.skip_update: true然后./prepare docker-compose up -d。如果已经卡住先docker-compose stop trivy再改配置。5.5 坑五hostname 用了 localhost客户端登录失败现象服务端docker login能成功但另一台机器docker login harbor.internal.lab报dial tcp: lookup harbor.internal.lab: no such host。原因harbor.yml里hostname填了localhost或127.0.0.1客户端无法解析。解决改成内网 DNS 能解析的域名或者在客户端/etc/hosts里加一条记录。改完hostname后必须重新./prepare docker-compose down docker-compose up -d否则证书和配置不生效。6. 装完怎么验证从 push 到 pull 走一遍才算跑通装完不验证等于没装。我一般会走一个最小闭环在服务端docker login然后docker tag一个本地镜像docker push上去再换一台客户端docker pull下来。这一步能同时验证认证、存储、网络和 registry 的读写。# 服务端登录输入 harbor.yml 里设的密码 docker login harbor.internal.lab # 拿一个本地镜像打 tag注意项目名要先在 harbor 界面里建好 docker tag nginx:alpine harbor.internal.lab/library/nginx:alpine # push 上去 docker push harbor.internal.lab/library/nginx:alpine # 换一台客户端同样先登录再 pull docker login harbor.internal.lab docker pull harbor.internal.lab/library/nginx:alpinedocker login如果报x509: certificate signed by unknown authority说明用的是自签证书且客户端没信任把服务端的ca.crt拷到客户端/etc/docker/certs.d/harbor.internal.lab/下即可。docker push如果报denied: requested access to the resource is denied检查项目名是否存在、当前用户是否有 push 权限。docker pull成功的话docker images里能看到harbor.internal.lab/library/nginx:alpine大小和源镜像一致。再补一个验证点登录 harbor 的 Web 界面用admin和harbor_admin_password进去看Projects里有没有libraryRepositories里有没有刚推的 nginx。Web 能打开、镜像能列出说明 portal 和 core 的数据库连接也正常。如果 Web 打不开但 push 能用多半是harbor-portal容器挂了docker-compose restart portal再试。从那以后我每次装完 harbor不管多急都强制走一遍 push 和 pull不看到客户端拉下来镜像不算完。这套流程在 arm 上跑通一次之后后面迁移或重装就是复制粘贴的事。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

基于Spring Boot与MyBatis的外卖系统实战:从登录鉴权到下单落库全链路解析

基于Spring Boot与MyBatis的外卖系统实战:从登录鉴权到下单落库全链路解析

简介:这是一套面向JavaWeb初学者与进阶开发者的「苍穹外卖」在线订餐系统完整学习资料,作者历时一个月整理,包含项目源码与配套笔记,适合希望通过真实项目巩固Servlet、JSP、MVC架构及框架集成等技能的读者。压缩包共约2000个文件…

2026/10/17 19:21:40 阅读更多 →
苍穹外卖JavaWeb项目实战:环境搭建、核心模块与避坑指南

苍穹外卖JavaWeb项目实战:环境搭建、核心模块与避坑指南

简介:这是一套面向JavaWeb初学者与进阶开发者的「苍穹外卖」在线订餐系统完整项目资料,适合希望通过真实项目巩固Servlet、JSP、MVC与框架集成等技能的学习者。压缩包共约2000个文件,整体约13.61MB,以388个xml配置、146个java源码…

2026/10/17 20:59:32 阅读更多 →
贝叶斯优化调参指南:从盲调 to 高效搜索

贝叶斯优化调参指南:从盲调 to 高效搜索

简介:这份资源面向机器学习与深度学习方向的开发者、算法工程师及学生,聚焦超参数调优这一影响模型性能与训练效率的关键环节,以贝叶斯优化为核心策略,帮助读者摆脱手动试错的低效困境。压缩包共4个文件,约10.96MB&…

2026/10/17 19:21:24 阅读更多 →

最新新闻

Kepware OPC DA Client配置实战:三层结构与QC质量码诊断

Kepware OPC DA Client配置实战:三层结构与QC质量码诊断

简介:本资源是一份面向工业物联网(IIoT)开发者与自动化工程师的Kepware OPC DA Client实战入门教程,聚焦于使用KEPServerEX构建稳定、高效的数据采集通道。内容从零开始详解项目(Project)创建、Channel配置…

2026/10/17 21:00:06 阅读更多 →
蓝桥杯省赛“直线”试题解析:整点去重与精确计数

蓝桥杯省赛“直线”试题解析:整点去重与精确计数

第十二届蓝桥杯省赛的试题C“直线”,是我印象里非常典型的“看着简单,做起来全是坑”的结果填空题。题目只有一句话:平面上有2021个整点,横坐标范围是0到19,纵坐标范围是0到20,问这些点一共能确定多少条不同…

2026/10/17 21:00:06 阅读更多 →
RTSP日志实战:从协议交互到问题定位的完整指南

RTSP日志实战:从协议交互到问题定位的完整指南

1. 从"rtsp 日志"这四个字里能挖出什么搞流媒体的人看到"rtsp 日志"这个标题,第一反应多半是又爱又恨。爱的是,RTSP协议本身并不复杂,抓包加日志基本能把问题定位到八九不离十;恨的是,真正到了生产…

2026/10/17 21:00:06 阅读更多 →
全网最全的AI软件测试面试题(含答案+文档):用TaoToken统一Key跑通面试题里的API测试场景

全网最全的AI软件测试面试题(含答案+文档):用TaoToken统一Key跑通面试题里的API测试场景

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 21:00:06 阅读更多 →
在VS Code中用MCP集成AI修图:NanoBanana实战指南

在VS Code中用MCP集成AI修图:NanoBanana实战指南

1. 先说结论:为什么要把修图能力塞进代码编辑器1.1 写代码的人其实每天都在“修图”你可能觉得修图是设计师的事,但只要你写过项目文档、搭过个人网站、做过自动化脚本、维护过电商后台,就一定会遇到这种场景:产品图带水印、截图背…

2026/10/17 21:00:06 阅读更多 →
GEE极端降水指数计算全流程:从CHIRPS数据到R95p趋势分析

GEE极端降水指数计算全流程:从CHIRPS数据到R95p趋势分析

简介:这份资源是一套基于Google Earth Engine(GEE)与NASA GPM IMERG V07数据的极端降水分析代码包,服务于遥感、水文与灾害风险研究场景,也适合有一定GEE基础、希望直接复用降水分析脚本的开发者。代码完整覆盖从研究区…

2026/10/17 20:59:06 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/16 21:35:51 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/17 1:44:59 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 21:54:38 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →