harbor常见问题及解决方法分享
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 -d
2. 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]
Description=Harbor
After=docker.service systemd-networkd.service systemd-resolved.service
Requires=docker.service
Documentation=https://goharbor.io/docs[Service]
Type=simple
Restart=on-failure
RestartSec=5
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]
WantedBy=multi-user.target
将harbor启动的文件放置到如下路径:
/usr/local/harbor/docker-compose.yml
设置服务启动并设置开机自动:
systemctl daemon-reload
systemctl start harbor.service
systemctl enable harbor.service
验证测试
- 重启docker服务,harbor服务会跟着重启:
[root@harbor ~]# systemctl restart docker
[root@harbor ~]# 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 +| | | | | | | postgres=CTc/postgrestemplate1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | | libc | =c/postgres +| | | | | | | postgres=CTc/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 password='1343c400219e7e2ef9f4c0843d340ba4', salt='2uI1HGu1Wd21qvflTPCd2XF4scUqyGZW' where username='admin';
上述password和salt字段值为默认密码Harbor12345
加密后的字符串,运行上述命令后,即可使用默认密码Harbor12345
登录。
- 退出
registry=# \q
postgres [ / ]$ exit
exit
相关文章:
harbor常见问题及解决方法分享
harbor常见问题及解决方法分享 参考自《harbor权威指南》。 1. harbor配置文件不生效 问题现象 无论是在生产环境下还是在测试环境下,都会有对配置文件进行修改的场景。很多用户在停掉Harbor容器后,都会修改配置文件然后启动Harbor,发现配…...
行列式与线性方程组解的关系
线性方程组是数学中一个重要的概念,它描述了多个变量之间的线性关系。行列式作为方阵的一个特殊值,对于判断线性方程组解的存在性和唯一性有着重要的作用。本文将探讨行列式与线性方程组解之间的关系,并区分齐次和非齐次方程组的情况。 齐次…...

四、自然语言处理_02RNN基础知识笔记
1、RNN的定义 RNN(Recurrent Neural Network,循环神经网络)是一种专门用于处理序列数据的神经网络架构,它与传统的前馈神经网络(Feedforward Neural Network)不同,主要区别在于它能够处理输入数…...
Spring 容器管理 Bean
Bean是什么 Bean 是指 Java 中的可重用软件组件,容器会根据提供的元数据来创建和管理这些 Bean,也包括它们之间的依赖关系。Spring 容器对 Bean 并没有太多的要求,无须实现特定接口或依赖特定库,只要是最普通的 Java 对象即可,这类对象也被称为 POJO(Plain Old Java Obj…...

SpringBoot开发——Spring Boot3.4 强大的结构化日志记录
文章目录 1. 简介2. 实战案例2.1 环境依赖2.2 快速入门2.3 输出到文件2.4 添加附加字段2.5 自定义日志格式总结1. 简介 日志记录是应用故障排除中早已确立的部分,也是可观测性的三大支柱之一,另外两个是指标和追踪。在生产环境中,没有人喜欢盲目行事,而当故障发生时,开发…...

信号和槽思维脑图+相关练习
将登录框中的取消按钮使用信号和槽的机制,关闭界面。 将登录按钮使用信号和槽连接到自定义的槽函数中,在槽函数中判断ui界面上输入的账号是否为"admin",密码是否为"123456",如果账号密码匹配成功,当前界面关…...

Unity Feel插件快速入门
What is Feel? Feel是一个即用型解决方案,让你的Unity项目提高游戏体验,增强玩家获得的反馈感,例如相机震动,屏幕闪烁,淡入淡出,等等几十种效果。这是一个模块化、用户友好、易于扩展的系统。 本文旨在让你快速入门,从全局快速了解这个插件,以及基本用…...

数据链路层(四)---PPP协议的工作状态
1 PPP链路的初始化 通过前面几章的学习,我们学了了PPP协议帧的格式以及组成,那么对于使用PPP协议的链路是怎么初始化的呢? 当用户拨号上网接入到ISP后,就建立起了一条个人用户到ISP的物理链路。这时,用户向ISP发送一…...

【C++】入门【六】
本节目标 一、继承的概念及定义 二、基类和派生类对象赋值转换 三、继承中的作用域 四、派生类的默认成员函数 五、继承与友元 六、继承与静态成员 七、复杂的菱形继承及菱形虚拟继承 八、继承的总结和反思 九、笔试面试题 一、继承的概念及定义 1.继承的概念 继承是面向对象…...

UE5 C++ 不规则按钮识别,复选框不规则识别 UPIrregularWidgets
插件名称:UPIrregularWidgets 插件包含以下功能 你可以点击任何图片,而不仅限于矩形图片。 UPButton、UPCheckbox 基于原始的 Button、Checkbox 扩展。 复选框增加了不规则图像识别功能,复选框增加了悬停事件。 欢迎来到我的博客 记录学习过…...

Elasticsearch Serverless 现已正式发布
作者:来自 Elastic Yaru Lin 基于全新无状态(stateless)架构的 Elasticsearch Serverless 现已正式发布。它采用完全托管方式,因此你可以快速启动项目而无需操作或升级,并且可以使用最新的向量搜索和生成式 AI 功能。 …...

如何使用apache部署若依前后端分离项目
本章教程介绍,如何在apache上部署若依前后端分离项目 一、教程说明 本章教程,不介绍如何启动后端以及安装数据库等步骤,着重介绍apache的反向代理如何配置。 参考此教程,默认你已经完成了若依后端服务的启动步骤。 前端打包命令使用以下命令进行打包之后会生成一个dist目录…...
openEuler安装UKUI桌面
# 升级更新 sudo yum -y update # 安装UKUI界面 dnf install ukui # 设置图形启动 systemctl set-default graphical.target # 重启 # 查看当前系统启动模式 systemctl get-default # 修改默认启动模式为 命令行界面模式 systemctl set-default multi-user.target 在UK…...

深入理解Oracle DB的锁和闩
1. 引言 本文深入介绍Oracle DB的锁和闩。 2. Oracle DB 锁的基本概念 2.1 定义与作用 锁是 Oracle 数据库用于控制并发访问的一种机制。它用于防止多个事务同时对同一数据进行不一致的操作,确保数据的完整性和一致性。例如,当一个事务正在更新一行数…...

jenkins+github+springboot自动部署
背景: 最近看流水线有点意思,就说自己也搞一套。 预期效果: idea提交代码后,GitHub接收,jenkins自动部署。【后续加个自动部署时的代码检查、单元测试、安全测试、sonarqube】 思路分析: idea上的spring代码push到gi…...
HTML5系列(10)-- 地理位置服务指南
前端技术探索系列:HTML5 地理位置服务指南 🌍 致读者:探索位置服务的魅力 👋 前端开发者们, 今天我们将深入探讨 HTML5 的地理位置服务(Geolocation API),这项强大的功能让我们能…...
【MySQL 进阶之路】SQL 优化
6.SQL 性能分析笔记 在现代数据库的高并发环境下,SQL 查询优化成为提升系统性能和响应速度的关键。本文将总结常见的 SQL 优化策略,包括插入优化、主键设计、排序优化、GROUP BY 优化等,帮助你在面对大规模数据时,做到高效查询和…...

Web3的技术栈详解:解读区块链、智能合约与分布式存储
随着数字时代的不断发展,Web3作为下一代互联网的核心理念逐渐走进了大众视野。它承载着去中心化、用户主权以及更高效、更安全的网络环境的期望。Web3不再是由少数中心化机构主导的网络,而是通过一系列核心技术的支撑,给每个用户赋予了更多的…...

[在线实验]-在docker中运行clickhouse
镜像下载 docker的clickhouse镜像资源-CSDN文库 加载镜像 首先,需要获取ClickHouse的Docker镜像。如果已经有镜像文件(如clickhouse.tar),可以使用docker load命令来加载它: docker load --input clickhouse.tar …...
Rust常用命令总结
安装Rust 检查并更新Ubuntu的软件包 $ sudo apt update $ sudo apt upgrade安装相关依赖:安装GCC、G、MAKE、curl $ sudo apt install build-essential $ sudo apt install curl安装Rust $ curl --proto https --tlsv1.2 -sSf https://sh.rustup.rs | sh执行命令…...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...

简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...

如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...

回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...
【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论
路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中(图1): mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...