当前位置: 首页 > news >正文

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

验证测试

  1. 重启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使用正常。

  1. 重启harbor机器后,harbor验证访问正常。

3. 在丢失secret key的情况下删除已签名的镜像

Harbor的镜像签名功能是镜像安全相关功能的重要一环,由 Notary 提供。已签名的镜像需要得到Notary的验证和授权才能被删除,如果用户丢失了Notary的secret key,则无法再删除已签名的镜像。在这种情况下,管理员是可以绕开限制将其删除的,步骤如下。

  1. 停止harbor
$ docker-compose down -v
  1. 运行prepare,生成不带notary的docker-compose文件
$ ./prepare --with-clair --with-chartmuseum --with-trivy
  1. 启动harbor
$ docker-compose up -d
  1. 此时harbor已经关闭了Notary组件,可以在harbor中删除已签名的镜像

  2. 恢复之前的配置

$ 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的密码重置。

  1. 在部署harbor的docker机器连接Harbor数据库;
$ docker exec -it harbor-db /bin/bash
$ psql -U postgres
  1. 选择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中的其中一种方法进行重置密码。

  1. 执行如下命令,重置admin密码为空
postgres=# select * from harbor_user;
postgres=# update harbor_user set salt='', password='' where where user_id = 1;

重启Harbor服务生效,然后使用harbor.yaml中配置的初始密码登录。

  1. 上述修改方式需要重启harbor组件,会影响业务。如果需要不停机恢复,可以尝试如下方法:
update harbor_user set password='1343c400219e7e2ef9f4c0843d340ba4', salt='2uI1HGu1Wd21qvflTPCd2XF4scUqyGZW'  where username='admin';

上述password和salt字段值为默认密码Harbor12345加密后的字符串,运行上述命令后,即可使用默认密码Harbor12345登录。

  1. 退出
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执行命令…...

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...

Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务

通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...

TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案

一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

代码规范和架构【立芯理论一】(2025.06.08)

1、代码规范的目标 代码简洁精炼、美观,可持续性好高效率高复用,可移植性好高内聚,低耦合没有冗余规范性,代码有规可循,可以看出自己当时的思考过程特殊排版,特殊语法,特殊指令,必须…...

MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)

macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 🍺 最新版brew安装慢到怀疑人生?别怕,教你轻松起飞! 最近Homebrew更新至最新版,每次执行 brew 命令时都会自动从官方地址 https://formulae.…...

Spring Boot + MyBatis 集成支付宝支付流程

Spring Boot MyBatis 集成支付宝支付流程 核心流程 商户系统生成订单调用支付宝创建预支付订单用户跳转支付宝完成支付支付宝异步通知支付结果商户处理支付结果更新订单状态支付宝同步跳转回商户页面 代码实现示例&#xff08;电脑网站支付&#xff09; 1. 添加依赖 <!…...

2.3 物理层设备

在这个视频中&#xff0c;我们要学习工作在物理层的两种网络设备&#xff0c;分别是中继器和集线器。首先来看中继器。在计算机网络中两个节点之间&#xff0c;需要通过物理传输媒体或者说物理传输介质进行连接。像同轴电缆、双绞线就是典型的传输介质&#xff0c;假设A节点要给…...