织梦网站模板安装本地,免费申请靓号,什么叫做网络营销,php旅游网站开发的功能harbor常见问题及解决方法分享
参考自《harbor权威指南》。
1. harbor配置文件不生效
问题现象
无论是在生产环境下还是在测试环境下#xff0c;都会有对配置文件进行修改的场景。很多用户在停掉Harbor容器后#xff0c;都会修改配置文件然后启动Harbor#xff0c;发现配…harbor常见问题及解决方法分享
参考自《harbor权威指南》。
1. harbor配置文件不生效
问题现象
无论是在生产环境下还是在测试环境下都会有对配置文件进行修改的场景。很多用户在停掉Harbor容器后都会修改配置文件然后启动Harbor发现配置还是保持原样而不是更新为刚修改的值。
问题原因
Harbor的配置文件在修改后并不会直接生效。Harbor的众多组件都有自己的配置文件和环境变量但是配置文件harbor.yml只有一个用户需要通过运行prepare容器使得Harbor配置文件中的配置项能够渲染到各组件所依赖的配置文件。参考命令如下
$ docker-compose down -v$ ./prepare --with-notary --with-clair --with-trivy --with-chartmuseum$ docker-compose up -d2. Docker重启后Harbor无法启动
问题现象
在使用docker部署harbor后如果重启docker服务或者重启机器后有时候会遇到harbor无法访问的问题。某些组件的容器会陷入无限重启状态。
问题原因
原因为Harbor的各个组件容器之间会有依赖关系这些信息都被定义在配置文件docker-compose.yml中。其中日志容器会监听本地IP地址127.0.0.1的1514端口以接收和汇总其他容器的日志。其他容器则将日志输出到标准输出中然后通过Docker的后台进程Docker Daemon将日志统一转发到127.0.0.1:1514。但是日志容器和Docker后台进程的启动顺序是随机的若日志容器先启动则它会发现Docker后台并未启动所以启动失败其他容器无法连接日志容器也会启动失败。
解决方法
这个问题的源头是两个互相依赖的进程无法保证启动顺序因为其启动顺序由操作系统调度决定所以Docker后台进程的生命周期管理已经超出了Harbor的能力范围无法在Harbor层面解决。但是我们可以在操作系统层面定义服务的启动顺序在主流Linux系统如Ubuntu和CentOS中利用类似如下所示的systemd配置将其根据自己的需求稍做修改并保存到操作系统的systemd启动配置文件夹处放到/lib/systemd/system文件夹或者/usr/lib/systemd/system/文件夹或者/etc/systemd/system路径下
创建文件harbor.service内容如下
[Unit]
DescriptionHarbor
Afterdocker.service systemd-networkd.service systemd-resolved.service
Requiresdocker.service
Documentationhttps://goharbor.io/docs[Service]
Typesimple
Restarton-failure
RestartSec5
ExecStart/usr/local/bin/docker-compose -f /usr/local/harbor/docker-compose.yml up
ExecStop/usr/local/bin/docker-compose -f /usr/local/harbor/docker-compose.yml down[Install]
WantedBymulti-user.target将harbor启动的文件放置到如下路径
/usr/local/harbor/docker-compose.yml设置服务启动并设置开机自动
systemctl daemon-reload
systemctl start harbor.service
systemctl enable harbor.service验证测试
重启docker服务harbor服务会跟着重启
[rootharbor ~]# systemctl restart docker
[rootharbor ~]# systemctl status harbor
● harbor.service - HarborLoaded: loaded (/etc/systemd/system/harbor.service; enabled; vendor preset: disabled)Active: active (running) since Tue 2024-12-03 21:28:07 EST; 52s ago验证harbor使用正常。
重启harbor机器后harbor验证访问正常。
3. 在丢失secret key的情况下删除已签名的镜像
Harbor的镜像签名功能是镜像安全相关功能的重要一环由 Notary 提供。已签名的镜像需要得到Notary的验证和授权才能被删除如果用户丢失了Notary的secret key则无法再删除已签名的镜像。在这种情况下管理员是可以绕开限制将其删除的步骤如下。
停止harbor
$ docker-compose down -v运行prepare生成不带notary的docker-compose文件
$ ./prepare --with-clair --with-chartmuseum --with-trivy启动harbor
$ docker-compose up -d此时harbor已经关闭了Notary组件可以在harbor中删除已签名的镜像 恢复之前的配置
$ docker-compose down -v
$ ./prepare --with-clair --with-chartmuseum --with-trivy --with-notary
$ docker-compose up -d说明 harbor v2.11.0中已去除notory、clair等安全组件仅支持trivy上述操作适用于支持notary的版本例如v2.0.0。 4. 丢失了系统管理员admin的密码
Harbor的系统管理员admin如果丢失密码后可参考如下方法将admin的密码重置。
在部署harbor的docker机器连接Harbor数据库
$ docker exec -it harbor-db /bin/bash
$ psql -U postgres选择Harbor数据库registry
postgres# \lList of databasesName | Owner | Encoding | Collate | Ctype | ICU Locale | Locale Provider | Access privileges
-------------------------------------------------------------------------------------------------------------postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | | libc | registry | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | | libc | template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | | libc | c/postgres | | | | | | | postgresCTc/postgrestemplate1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | | libc | c/postgres | | | | | | | postgresCTc/postgres
(4 rows)postgres# \c registry
You are now connected to database registry as user postgres.使用下面步骤3、4中的其中一种方法进行重置密码。
执行如下命令重置admin密码为空
postgres# select * from harbor_user;
postgres# update harbor_user set salt, password where where user_id 1;重启Harbor服务生效然后使用harbor.yaml中配置的初始密码登录。
上述修改方式需要重启harbor组件会影响业务。如果需要不停机恢复可以尝试如下方法
update harbor_user set password1343c400219e7e2ef9f4c0843d340ba4, salt2uI1HGu1Wd21qvflTPCd2XF4scUqyGZW where usernameadmin;上述password和salt字段值为默认密码Harbor12345加密后的字符串运行上述命令后即可使用默认密码Harbor12345登录。
退出
registry# \q
postgres [ / ]$ exit
exit