Harbor安装前必须确认Docker与docker-compose(v2.0+)已就绪、主机内存≥4GB、域名或IP可被客户端解析且与harbor.yml中hostname一致。

Harbor 安装前必须确认的 3 个前提
Harbor 不是单个二进制,而是一套基于 Docker Compose 编排的 Web 服务,直接用 apt install harbor 或 yum install harbor 肯定失败——官方从不提供系统包。你得自己拉 release 包、解压、配 harbor.yml、再跑 ./install.sh。
- Docker 和
docker-compose(v2.0+)必须已就位,且docker info能正常返回;docker-compose --version输出不能报错 - 主机需有至少 4GB 内存(开箱即用默认配置下,PostgreSQL + Redis + Registry 吃内存很快)
- 域名或 IP 必须可被客户端解析(Harbor 强制要求 HTTPS,哪怕用自签证书,也得填进
harbor.yml的hostname字段,填localhost会卡在登录环节)
下载并解压 Harbor offline installer
别碰 GitHub 上的源码仓库,也别 clone,直接去 releases 页面 下载 harbor-offline-installer-*.tgz(带 offline 的才是完整包,online 版本安装时要联网拉镜像,容易因网络中断失败)。
- 执行
tar -xvf harbor-offline-installer-*.tgz解压后,进入harbor/目录 - 立刻复制一份配置模板:
cp harbor.yml.tmpl harbor.yml,后续只改这个harbor.yml - 关键字段必须改:把
hostname改成你的服务器 IP 或域名(例如192.168.10.50或harbor.example.com),否则容器启动后网页打不开或登录报unauthorized - 如果只是测试,把
https块整个注释掉(删掉或加#),Harbor 会自动降级为 HTTP;但生产环境必须配 TLS,否则 Docker client 拒绝 push 镜像
运行 install.sh 后打不开网页?检查这 3 个地方
执行 sudo ./install.sh 成功不代表能访问。常见“白屏”或“连接被拒绝”,往往不是 Harbor 没启起来,而是端口、证书或代理挡住了。
- 确认
docker-compose ps所有服务状态是Up,尤其注意nginx和core不能是Restarting或Exit;若 core 一直重启,大概率是harbor.yml里hostname和实际访问地址不一致 - 默认监听
0.0.0.0:80(HTTP)或0.0.0.0:443(HTTPS),用ss -tlnp | grep ':80\|:443'看端口是否真被 nginx 占用;CentOS 7+ 默认 firewalld 拦着 80/443,得执行sudo firewall-cmd --add-port=80/tcp --permanent && sudo firewall-cmd --reload - 浏览器访问时,URL 必须和
harbor.yml中hostname完全一致(比如配了harbor.local,就输http://harbor.local,不能输 IP;反之亦然);Chrome 对自签名证书越来越严格,首次访问可能要点“高级 → 继续前往…”
push 镜像失败:x509 certificate signed by unknown authority
这是 Docker client 和 Harbor 之间 TLS 信任链断了,和 Harbor 本身无关。只要用了 HTTPS(哪怕自签),每个要 push/pull 的机器都得把 Harbor 的 CA 证书加进 Docker 的信任列表。
- 先从 Harbor 服务器拿到证书:如果是自签,证书在
/data/cert/下(由prepare脚本生成),文件名通常是ca.crt;如果是 Nginx 反代,就用你配的那张证书 - 在客户端机器上,把证书放进
/etc/docker/certs.d/<your-harbor-host>:<port>/ca.crt</port></your-harbor-host>(注意路径必须和访问地址完全匹配,比如访问https://harbor.example.com,目录就得是/etc/docker/certs.d/harbor.example.com/ca.crt) - 改完必须重启 Docker:
sudo systemctl restart docker;不重启,Docker 还是用老的信任库 - 验证:执行
curl -k https://<your-harbor-host>/api/v2.0/ping</your-harbor-host>应返回{"code":200,"message":"OK"};再试docker login <your-harbor-host></your-harbor-host>
最常被跳过的其实是证书路径命名规则和 Docker daemon 重启动作——少一个,docker push 就永远卡在 x509 错误里。

















