「Harbor」- 常见问题处理

解决方案

Harbor API

How to Browse and Query Harbor Registry using REST API

在 Harbor 的 GitHub 仓库中的「docs/swagger.yaml 1.5.3」为 Harbor 的 API 文档。

复制到“http://editor.swagger.io”中进行显示。

Harbor CLI

https://github.com/int32bit/python-harborclient

取回 admin 密码

How to reset and retrieve forgotten Harbor admin password (76289)

该方法仅适用于没有通过 Harbor GUI 修改密码的场景,否则只能重置。

第一步、进入容器

# Harbor version <=1.7:
docker exec -it "<harbor-adminserver container id>" bash

# Harbor version >=1.8:
docker exec -it "<harbor-core container id>" bash

第二步、查看密码

env | grep HARBOR_ADMIN_PASSWORD

重置 admin 密码

docker exec -it "<harbor-db container id>" bash

psql -U postgres -d registry
> select * from harbor_user;
> update harbor_user set salt='', password='' where user_id = "<admin user_id>";

# 重启服务,也可能无需重启,我们没有重置过,这里治理参考官方文档进行记录。

只能复制 HASH 而不能复制 TAG

Why is copy pull followed by hash, instead of tag?? · Issue #12763 · goharbor/harbor

在 Harboar 中,复制拉取命令,但是拉取命令没有使用 TAG 而是使用 HASH 作为标签。

根据描述,在 2.1 版本能够复制 TAG 而不是 HASH 信息。

# 07/21/2021 即使升级到 2.3.0 版本,那个按钮还是复制 HASH 信息。然而,需要点击前面的 HASH 值才会进入新页面,然后才能复制带有 TAG 的 docker pull 命令。

library 的作用

Remove /library prefix for default project · Issue #10648 · goharbor/harbor

在 Harboar 创建之后,会存在名为 library 的项目。

该项目主要用于存储 DockerHub 那些官方镜像,比如 Nginx、Ubunut 等等,这些官方镜像是没有前缀的镜像。

机器人帐号

参考 Harbor docs | Create Robot Accounts 文档,以获取更多使用方法

以普通帐号类似,但是有以下特点:
1)不能登录界面,只能命令行登录(docker login)
2)在 Project 中创建和管理,区别于系统用户,不能在其他 Project 中使用;
3)能够设置过期时间;
4)帐号为 robot$xxxx 格式,密码也极长;

在 CI 中,我们创建机器人帐号,使用机器人帐号来推送镜像或者拉取镜像;

Harbor + Let’s Encrypt(关于证书续期问题)

在 Harboar 2.3.0 中,HTTPS 的配置流程大致如下:
1)通过 harbor.yml 配置,指定 TLS 证书文件位置;
2)执行 ./prepare 命令,证书会被复制到特定目录,供容器挂载;

也就是说,如果需要进行 TLS 证书续期:
1)certbot 更新证书文件;
2)停止 Harbor 服务,至少得停止 Nginx 组件;
3)执行 ./prepare 命令,以完成证书复制;
3)启动 Harbor 服务,或者启动 Nginx 服务;

# 10/11/2021 目前我们的做法是停止服务并更新证书。