harbor安装成功取决于docker、docker compose和openssl三个依赖是否就位:docker≥20.10、docker compose≥2.0.0、openssl已安装;harbor.yml需修改hostname、https.enabled及data_volume路径并设权限;容器退出多因harbor-db启动失败,常见于磁盘空间不足或/data/database权限错误。

Harbor 能不能装成功,不取决于你有没有下载安装包,而取决于 docker、docker compose 和 openssl 这三个依赖是否真正就位——缺一个,./install.sh 就会静默失败或容器反复退出。
检查并安装 Harbor 的三个硬性依赖
很多“安装失败”实际卡在依赖上,不是配置问题。必须逐个确认:
-
docker --version输出版本 ≥20.10;旧版(如 18.09)会导致failed to create endpoint错误 -
docker compose version(注意:是compose,不是compose-v1或docker-compose)输出 ≥2.0.0;若提示command not found,需从 GitHub releases 下载二进制,放进/usr/local/bin/ -
which openssl必须有输出;CentOS/RHEL 最小化安装常漏装,用yum install -y openssl补上
离线安装时 harbor.yml 的三处必改项
解压 harbor-offline-installer-*.tgz 后,harbor.yml 不能直接用。关键修改点只有三个,但错一个就登录失败或无法访问:
-
hostname必须设为客户端能解析的值,比如harbor.example.com或宿主机真实 IP(如192.168.10.50),绝不能写localhost或127.0.0.1,否则docker login报unauthorized: authentication required - 若不启用 HTTPS(仅测试),必须整段注释掉
https:块,并设置http.port: 8080(或其他非 80 端口),同时确保顶部https.enabled: false -
data_volume默认是/data,但生产环境建议改成独立路径(如/opt/harbor-data),然后提前执行chown 10000:10000 /opt/harbor-data(Harbor 容器以 UID 10000 运行)
容器启动后立即退出?先看 harbor-db 日志
运行 ./install.sh 后,docker ps -a 显示 harbor-core 或 harbor-jobservice 是 Exited (1),别急着重装。高频原因是数据库没起来:
- 执行
docker inspect harbor-db | grep -A 5 "Status",若看到"ExitCode": 1,基本确定是harbor-db启动失败 - 常见诱因:磁盘空间不足(尤其
/data/database所在分区),或/data/database目录权限不是 UID 10000(chown -R 10000:10000 /data/database) - 若所有容器都 running,但浏览器打不开
http://your-host:8080,检查宿主机防火墙:firewall-cmd --list-ports看是否放行了配置的http.port
客户端 push 镜像报 x509 certificate signed by unknown authority
这是 HTTPS 场景下最典型的信任问题,和 Harbor 本身无关,而是客户端 Docker daemon 不信任自签名证书:
- 若用的是 Harbor 自动生成的证书(即没配自己的 CA),必须把
harbor.crt(通常在common/config/registry/下)拷到客户端的/etc/docker/certs.d/<your-host>:<port>/</port></your-host>目录下(目录需手动创建) - 路径必须严格匹配:比如
hostname设为harbor.example.com、https.port: 443,那客户端就要放证书到/etc/docker/certs.d/harbor.example.com/ - 改完记得重启 Docker:
systemctl restart docker;否则证书不会加载
Harbor 安装真正的复杂点不在步骤多,而在于每个组件(db、redis、registry、core)都以容器形式启动,且存在强依赖顺序和权限约束。最容易被忽略的是 data_volume 目录属主和 harbor-db 的启动状态——它们不出错,其他服务才可能正常运转。











