解决方案
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 目前我们的做法是停止服务并更新证书。