harbor安装前必须确认docker(≥20.10)、docker compose(≥2.0.0,用docker compose version验证)和openssl(用于生成证书)三个依赖项,缺一不可。

Harbor 安装前必须确认的 3 个依赖项
Harbor 不是单二进制可执行文件,它依赖 Docker、Docker Compose 和 OpenSSL(用于生成证书),缺一不可。很多部署失败实际卡在 docker-compose 版本不兼容或 openssl 缺失上。
-
docker必须 ≥ 20.10,运行docker --version验证;旧版(如 18.09)可能触发failed to create endpoint错误 -
docker-compose必须 ≥ 2.0.0(注意:不是 Python 的docker-composev1.x),用docker compose version(无连字符)检查;若输出command not found,需从 GitHub releases 下载二进制并放入/usr/local/bin/ -
openssl必须可用,Harbor 安装脚本会调用openssl req生成默认证书;CentOS/RHEL 用户常因最小化安装漏装openssl包,运行which openssl确认
离线安装 Harbor 时 config.yml 的关键修改点
官网下载的 harbor-offline-installer-v2.11.0.tgz 解压后,harbor.yml 是核心配置,但默认值几乎不能直接用。尤其要注意 hostname、https 配置和 storage 路径。
-
hostname必须设为可被客户端解析的域名或 IP,不能写localhost或127.0.0.1;否则docker login会报unauthorized: authentication required - 若不启用 HTTPS(仅测试环境),必须将
https块整段注释掉,并把http.port设为非 80 端口(如8080),同时在harbor.yml顶部设https.enabled: false -
data_volume默认是/data,但若系统盘空间小,建议改成独立挂载点(如/opt/harbor-data),并提前chown 10000:10000 /opt/harbor-data(Harbor 容器以 UID 10000 运行)
启动后容器反复退出的常见原因和快速定位法
执行 ./install.sh 后,docker ps -a 显示 harbor-core 或 harbor-jobservice 状态为 Exited (1),说明服务没起来。别急着重装,先看日志。
- 进容器查日志最准:
docker logs harbor-core(不是docker logs -f,因为已退出);高频错误是failed to connect to database: dial tcp 127.0.0.1:5432: connect: connection refused,意味着harbor-db没启动成功 - 查数据库容器状态:
docker inspect harbor-db | grep -A 5 "Status";若显示"ExitCode": 1,大概率是磁盘空间不足或/data/database权限不对(必须属主 UID 10000) - 若所有容器都启动但
harbor-portal无法访问,检查宿主机防火墙:firewall-cmd --list-ports看是否放行了http.port或https.port(默认 443/80)
客户端 push 镜像时提示 x509 certificate signed by unknown authority
这是 HTTPS 证书问题,本质是 Harbor 自签证书未被 Docker 客户端信任。解决方式取决于你是否启用了自定义域名 + 正式证书。
- 若用默认自签名证书(即没改
https块里的certificate和private_key路径),必须把harbor.cfg生成的ca.crt(位于common/config/registry/ca.crt)拷到客户端:sudo mkdir -p /etc/docker/certs.d/<your-harbor-domain>:<port></port></your-harbor-domain>,然后sudo cp ca.crt /etc/docker/certs.d/<your-harbor-domain>:<port>/ca.crt</port></your-harbor-domain> - 若已配置 Nginx 反向代理 + Let's Encrypt 证书,就不用管这个;但必须确保 Nginx 的
proxy_ssl_verify off关闭,且proxy_pass https://harbor-backend中的 backend 地址能被 Nginx 解析 - 临时绕过(仅调试):
echo '{ "insecure-registries":["<your-ip>:<port>"] }' | sudo tee /etc/docker/daemon.json && sudo systemctl restart docker</port></your-ip>;但生产环境严禁使用
证书路径、UID 权限、DNS 解析这三处最容易被跳过验证,实际排障时间 70% 花在这三个点上。











