harbor不能通过yum或apt安装,必须手动下载离线包、配置harbor.yml并执行./install.sh;需确保docker≥24.0.7、docker compose≥v2.24.5、openssl已安装,hostname不可设为localhost或127.0.0.1,https启用时证书路径须为绝对路径且权限正确,客户端需信任ca.crt。

yum install harbor 或 apt install harbor 安装——它没有系统包,必须手动下载离线包、配 harbor.yml、再运行 ./install.sh。跳过这一步,90% 的安装失败都源于此。
确认 docker 和 docker compose 版本是否真正可用
Harbor v2.10+ 要求 docker --version ≥ 24.0.7,且 docker compose version(注意是空格,不是连字符)≥ v2.24.5。旧版本常见报错:failed to create endpoint 或 command not found: docker-compose。
- 执行
docker --version和docker compose version双重验证;若后者报错,说明你装的是 v1.x(Python 版),得删掉并从 GitHub releases 下载二进制:sudo curl -L "https://github.com/docker/compose/releases/download/v2.24.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose,再sudo chmod +x /usr/local/bin/docker-compose -
which openssl必须有输出;CentOS 最小化安装常缺 OpenSSL,立刻补装:yum install -y openssl - Ubuntu 用户慎用
apt install docker.io,它默认装的是低版本 Docker(如 20.10 以下),建议用官方 repo 安装docker-ce
修改 harbor.yml 的 hostname 和 https 配置
hostname 填 localhost 或 127.0.0.1 会导致 docker login 报 unauthorized: authentication required;浏览器访问时 URL 必须和 hostname 字段完全一致,否则证书校验失败,Chrome 会直接拦截。
-
hostname必须设为客户端能解析的值,比如192.168.10.50或harbor.example.com - 若仅测试,整段注释掉
https:块,并设http.port: 8080,同时确保https.enabled: false - 启用 HTTPS 时,
certificate和private_key路径必须是绝对路径,且文件属主为 UID 10000(Harbor 容器运行用户),私钥权限需为600
容器反复退出时优先查 harbor-db 和目录权限
执行 ./install.sh 后,docker ps -a 看到 harbor-core 或 harbor-jobservice 状态是 Exited (1),大概率是数据库没起来,而不是配置写错了。
- 先查状态:
docker inspect harbor-db | grep -A 5 "Status",若"ExitCode": 1,重点看磁盘空间和/data/database(或你改过的data_volume路径)权限 -
/data/database目录必须属主 UID 10000:chown -R 10000:10000 /data/database - 清理旧容器重试:
docker-compose down -v && ./install.sh
客户端 push 镜像前必须信任 ca.crt
启用 HTTPS 后,Docker 客户端默认不信任自签名证书,push 会报 x509 certificate signed by unknown authority。
- 将 Harbor 生成的
ca.crt(通常在/data/cert/)复制到客户端机器的/etc/docker/certs.d/{host}:443/目录下({host}替换为harbor.yml中的hostname值) - 重启 Docker:
systemctl restart docker - 若用 IP 访问,证书生成时需加
-addext "subjectAltName = IP:192.168.10.50",否则 Chrome 会拒绝连接
hostname、访问 URL、客户端 docker login 地址,四者必须一字不差;权限、路径、版本、防火墙端口放行,任何一个环节错位,都会导致静默失败。











