教你如何獲取Harbor的帶tag的鏡像清單
最近的工作中,需要批量處理harbor中的一些鏡像,其中關(guān)鍵的一步就是獲取harbor中全部鏡像的帶tag的清單。我在網(wǎng)上找了許久,沒(méi)有找到可用的。
最后我自己寫了一個(gè)java方法,成功實(shí)現(xiàn)了這一需求。
本文測(cè)試的harbor的版本是V2.3.3。
下列代碼中,使用了一個(gè)叫HttpUtils.sendGet的方法。這是我自己實(shí)現(xiàn)的一個(gè)HTTP請(qǐng)求工具。其代碼參見(jiàn):Java原生HttpClient使用示例。
public void getImages(String harborHost, String cookieStr) throws Exception {
HttpResponse<String> catalogResp = HttpUtils.sendGet(harborHost + "/v2/_catalog", cookieStr);
List<String> strings = JSONObject.parseObject(catalogResp.body()).getJSONArray("repositories").toJavaList(String.class);
HashMap<String, List<String>> result = new HashMap<>();
for (String image : strings) {
ArrayList<String> tagList = new ArrayList<>();
String[] split = image.split("/");
String repositoryName = split[0];
String imageName = split[1];
String urlForImageInfo = harborHost + "/api/v2.0/projects/" + repositoryName + "/repositories/" + imageName;
HttpResponse<String> infoResp = HttpUtils.sendGet(urlForImageInfo, cookieStr);
Integer artifactCount = JSONObject.parseObject(infoResp.body()).getInteger("artifact_count");
int pageNum = artifactCount / 15;
pageNum = pageNum * 15 >= artifactCount ? pageNum : pageNum + 1;
for (int i = 1; i <= pageNum; i++) {
String urlForTags = urlForImageInfo + "/artifacts?with_tag=true&with_scan_overview=true&with_label=true&page_size=15&page=" + i;
HttpResponse<String> tagsResp = HttpUtils.sendGet(urlForTags, cookieStr);
JSONArray tagArray = JSONObject.parseArray(tagsResp.body());
for (int j = 0; j < tagArray.size(); j++) {
String tagsStr = tagArray.getJSONObject(j).getString("tags");
if (!StrUtils.isEmpty(tagsStr)) {
JSONArray tags = tagArray.getJSONObject(j).getJSONArray("tags");
for (int k = 0; k < tags.size(); k++) {
tagList.add(tags.getJSONObject(k).getString("name"));
}
}
}
}
result.put(image, tagList);
}
for (String key : result.keySet()) {
for (String t : result.get(key)) {
System.out.println(key + ":" + t);
}
}
}
此方法需要傳入兩個(gè)參數(shù)。第一個(gè)是:harborHost為harbor的URL的字符串,比如:https://harbor.wja.cn
第二個(gè)也是一個(gè)字符串,需要手動(dòng)登錄harbor頁(yè)面,在首頁(yè)中,按F12,彈出開(kāi)發(fā)工具,然后刷新頁(yè)面,第一個(gè)請(qǐng)求的cookie的值就所需的字符串,如下圖所示:

測(cè)試結(jié)果如下:

到此這篇關(guān)于教你如何獲取Harbor的帶tag的鏡像清單的文章就介紹到這了,更多相關(guān)獲取Harbor鏡像清單內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
一步步教你用docker部署postgreSQL數(shù)據(jù)庫(kù)
這篇文章主要給大家介紹了關(guān)于如何使用docker部署postgreSQL數(shù)據(jù)庫(kù)的相關(guān)資料,PostgreSQL是一款功能豐富的關(guān)系型數(shù)據(jù)庫(kù),類似于MySQL,它也是受歡迎程度非常高的,需要的朋友可以參考下2023-11-11
IDEA集成Docker實(shí)現(xiàn)一鍵部署的詳細(xì)過(guò)程
這篇文章主要介紹了IDEA集成Docker實(shí)現(xiàn)一鍵部署,Docker基于Windows集成IDEA,本文分步驟通過(guò)圖文實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08
如何在 Ubuntu 下通過(guò) Docker 部署 Caddy 
本文介紹了如何在Ubuntu系統(tǒng)下通過(guò)Docker部署Caddy服務(wù)器,首先安裝Docker,然后啟動(dòng)Docker服務(wù)并設(shè)置為開(kāi)機(jī)自啟,接著拉取Caddy鏡像,并創(chuàng)建一個(gè)Caddyfile配置文件,使用命令運(yùn)行Caddy容器,并將本地的Caddyfile掛載到容器內(nèi),感興趣的朋友跟隨小編一起看看吧2025-03-03
在Docker中如何配置網(wǎng)絡(luò)并訪問(wèn)互聯(lián)網(wǎng)
這篇文章主要介紹了在Docker中如何配置網(wǎng)絡(luò)并訪問(wèn)互聯(lián)網(wǎng)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01
清理docker磁盤空間的方法總結(jié)(附詳細(xì)講解)
docker?鏡像特別容易占空間,稍微不注意可能磁盤爆滿,所以本文給大家詳細(xì)介紹了如何清理?docker?磁盤空間,并通過(guò)代碼示例給大家講解的非常詳細(xì),需要的朋友可以參考下2024-02-02
騰訊云服務(wù)器docker開(kāi)啟端口后無(wú)法訪問(wèn)的解決方法
本文主要介紹了騰訊云服務(wù)器docker開(kāi)啟端口后無(wú)法訪問(wèn)的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06

