发布于2026-05-28 阅读(0)
扫一扫,手机访问
部署Harbor私有镜像仓库,尤其是在生产环境启用HTTPS时,很多朋友都遇到过“明明安装脚本跑完了,但网页就是打不开”或者“docker login失败”的窘境。其实,问题的根源往往不在于Harbor本身,而在于几个前置依赖和配置细节没有严格对齐。今天,我们就来把这些“坑”一个个填平。

先明确一个核心前提:docker 版本必须 ≥ 20.10,docker compose 必须 ≥ 2.0.0,openssl 必须可用。这三者缺一不可,否则./install.sh即使执行完毕,Harbor也大概率无法正常启动,千万别跳过验证步骤。
很多“安装成功但服务异常”的情况,本质是依赖版本不匹配。这不是“版本低一点也能凑合”的问题,而是Harbor v2.9+ 版本已经明确拒绝旧版的docker-compose(v1.x)以及低于20.10的docker引擎。
具体怎么确认?
docker --version,输出必须是Docker version 20.10.x或更高。如果显示的是18.09这类旧版本,后续运行docker info时很可能会报failed to create endpoint之类的错误。docker compose(中间无连字符)。运行docker compose version,应输出类似Docker Compose version v2.27.1。如果提示command not found,说明系统里装的还是Python版的docker-compose(v1),需要手动下载二进制文件并放到/usr/local/bin/目录下。which openssl,必须返回一个有效路径。在CentOS/RHEL等系统的最小化安装中,openssl包经常被漏装,只需执行yum install -y openssl补上即可。在直接运行./install.sh之前,harbor.yml配置文件里有三处是必须修改的,否则后续docker login失败或页面502错误几乎是必然的。
hostname:这里不能简单地写localhost或127.0.0.1,必须填写客户端(包括浏览器和Docker客户端)能够解析的地址。比如服务器的IP地址192.168.88.240,或者一个配置好的域名harbor.example.com。这里有一个关键原则:浏览器访问的URL、docker login时使用的地址、以及证书中的CN字段,这三者必须完全一致。https配置块:生产环境强烈建议启用HTTPS。如果只是在测试环境想用HTTP,需要将https:及其下方的所有配置行整段注释掉,并确保配置文件顶部有https.enabled: false的明确设置。同时,记得把http.port从默认的80端口改为其他端口(例如8080),否则如果宿主机80端口已被占用,Harbor的HTTP服务将无法监听。data_volume:默认数据目录是/data。如果系统盘空间紧张,建议将其修改到一个独立的、空间充足的路径,比如/opt/harbor-data。修改后,务必执行chown 10000:10000 /opt/harbor-data命令,因为Harbor的容器是以UID 10000的用户运行的,目录权限不对会导致harbor-db等核心组件启动失败。这是HTTPS配置中最容易出错的一环。Harbor在启动时会严格按照harbor.yml中certificate和private_key指定的路径去读取文件。路径错一个字符、文件权限不对、或者证书的CN与hostname不一致,都会直接导致harbor-portal服务无法响应,浏览器则会报NET::ERR_CERT_COMMON_NAME_INVALID错误。
具体需要注意以下几点:
-subj "/CN=xxx"中的xxx必须和harbor.yml里的hostname一字不差。如果使用IP地址访问,还需要在生成命令中添加-addext "subjectAltName = IP:192.168.88.240"这样的扩展字段。/usr/local/harbor/tls/cert.crt。如果你把证书放在了/root/tls/这类默认容器无权访问的目录,要么通过volume映射进容器,要么提前将证书文件移动到Harbor安装目录下。chmod 600 tls/cert.key,将私钥文件权限设置为600。如果权限不对,nginx容器会在启动时拒绝加载私钥,日志中会出现SSL_CTX_use_PrivateKey_file failed的错误。当看到docker ps -a里有容器状态是Exited (1)时,先别急着重装整个Harbor。按照以下顺序排查,往往能快速定位问题。
harbor-core日志:运行docker logs harbor-core(注意不要加-f,因为它已经退出了)。一个高频错误是failed to connect to database: dial tcp 127.0.0.1:5432,这通常意味着harbor-db数据库容器没有成功启动。harbor-db状态:运行docker inspect harbor-db | grep -A 5 "Status"。如果显示"ExitCode": 1,接着检查两个方向:一是磁盘空间是否充足(df -h /data),二是数据目录的权限是否正确(ls -ld /data/database的属主必须是10000)。harbor-portal是否在监听端口:运行ss -tlnp | grep ':80\|:443',查看80或443端口是否有进程在监听。如果没有输出,很可能是防火墙挡住了,需要检查并放行相应端口:在CentOS/RHEL上使用firewall-cmd --list-ports,在Ubuntu上使用ufw status。总而言之,证书路径、hostname一致性、以及UID目录权限这三点,任意一个配置错误都可能导致Harbor在启动后瞬间崩溃。而且错误日志分散在不同的容器里,很容易让人误判。所以,动手部署前,务必逐行核对上述配置,这能帮你节省大量排错时间。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
4
5
6
7
8
9