一键获取Harbor中镜像信息,快捷查询镜像

Shell脚本获取Harbor中所有的镜像列表:

通过调用Harbor API,先获取所有项目(Projects),然后循环获取每个项目下的镜像名称,再循环获取某个镜像的所有tag版本,最后以指定的格式输出到一个镜像清单文件中。

而Harbor的API有两个版本(v1、v2), 每个版本的API调用方法都不一样。

1.查看harbor的API版本:

$ curl https://192.168.2.250:443/api/version  -k
{"version":"v2.0"}

2.harbor V1 api的shell脚本:

$ cat Harbor-image-list.sh
#!/bin/bash

#镜像清单文件,将获取到的镜像信息存到该文件中
File=harbor-images-`date '+%Y-%m-%d'`.txt
## 定义Harbor连接地址,这里需要改为你们自己的Harbor地址
Address=http://192.168.2.250:443
## 定义连接Harbor的用户名和密码(因为是获取全部的镜像,只有admin用户才有该权限)
Hamin=admin:Harbor12345
## 获取Harbor中有哪些项目(Project)
Project_List=$(curl -u "$Hamin"  -X GET  $Address/api/projects  -H "Content-Type: application/json"   | grep name | awk '/"name": /' | awk -F '"' '{print $4}')

for Project in $Project_List;do
  # 循环获取每个项目下所有的镜像
 Image_Names=$(curl -u "$Hamin"  -X GET $Address/api/search?q=$Project -H "Content-Type: application/json" | grep "repository_name" | awk -F "\"" '{print $4}')
    for Image in $Image_Names;do
    # 循环获取每个镜像所有的标签(版本)
    Image_Tags=$(curl -u "$Hamin"  -X GET  $Address/api/repositories/$Image/tags -H "Content-Type: application/json" | awk '/"name": /' | awk -F '"' '{print $4}')
        for Tag in $Image_Tags;do
        # 将获取到的镜像完整路径存档到镜像清单文件
        echo "$Address/$Image:$Tag" | grep -v Base | grep -v Image | grep -v CentOS >>  $File
        done
    done
done
$ chmod +x   Harbor-image-listk.sh       #给脚本可执行权限
$ sh Harbor-image-listk.sh    #执行脚本

3.harbor V2 api的shell脚本:

$ cat  Harbor-image-listk-v2.sh
#!/bin/bash
Harbor_Address=192.168.2.250:443       #Harbor主机地址
Harbor_User=admin                      #登录Harbor的用户
Harbor_Passwd=Harbor12345              #登录Harbor的用户密码
Images_File=harbor-images-`date '+%Y-%m-%d'`.txt   # 镜像清单文件
Tar_File=/backup/Harbor-backup/                 #镜像tar包存放路径
set -x
# 获取Harbor中所有的项目(Projects)
Project_List=$(curl -u admin:Harbor12345  -H "Content-Type: application/json" -X GET  https://192.168.2.250:443/api/v2.0/projects  -k  | python -m json.tool | grep name | awk '/"name": /' | awk -F '"' '{print $4}')

for Project in $Project_List;do
   # 循环获取项目下所有的镜像
    Image_Names=$(curl -u admin:Harbor12345 -H "Content-Type: application/json" -X GET https://192.168.2.250:443/api/v2.0/projects/$Project/repositories -k | python -m json.tool | grep name | awk '/"name": /' | awk -F '"' '{print $4}')
    for Image in $Image_Names;do
        # 循环获取镜像的版本(tag)
        Image_Tags=$(curl -u admin:Harbor12345  -H "Content-Type: application/json"   -X GET  https://192.168.2.250:443/v2/$Image/tags/list  -k |  awk -F '"'  '{print $8,$10,$12}')
        for Tag in $Image_Tags;do
            # 格式化输出镜像信息
            echo "$Harbor_Address/$Image:$Tag"   >> harbor-images-`date '+%Y-%m-%d'`.txt
        done
    done
done
$ chmod +x Harbor-image-listk-v2.sh
$ sh Harbor-image-listk-v2.sh

4.基于镜像清单将Harbor中的镜像制作成tar包:

前面通过shell脚本获取harbor中的镜像列表,并以harbor地址:服务端口/项目名称/镜像名称:tag的格式输出到文件中。

接下来可根据该文件批量pull镜像到本地,然后制作成tar包

$ cat image-pull.sh
#!/bin/bash
###使用docker从镜像文件中下载镜像——将下载的镜像进行打包保存——删除下载到本地的镜像——将封装好的镜像包移动到备份目录
Image_tags=$(uniq $Images_File)
for image_tag in $Image_tags;do
    image_Name=$(echo $image_tag | awk -F/ '{print $3}' |  awk -F: '{print $1}')
    image_Lable=$(echo $image_tag | awk -F/ '{print $3}' |  awk -F: '{print $2}')
    docker pull $image_tag
    docker save $image_tag  -o $image_Name-$image_Lable.tar
    docker rmi  $image_tag
    mv $image_Name-$image_Lable.tar  $Tar_File
done
$ chmod +x  image-pull.sh

  • 9
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
镜像push到Harbor后,如果镜像丢失,可能有几个原因。首先,可能是在推送镜像的过程出现了错误,导致镜像没有成功上传到Harbor。其次,可能是在推送镜像后,Harbor的存储空间不足,导致镜像被删除以释放空间。最后,可能是在Harbor的配置设置了自动清理策略,导致镜像被自动删除。 为了解决这个问题,可以按照以下步骤进行排查和处理: 1. 首先,检查推送镜像的过程是否有任何错误信息。可以查看推送镜像的命令输出或者Harbor的日志文件,以确定是否有任何错误发生。 2. 确保Harbor的存储空间足够,可以通过查看Harbor的存储配置或者联系系统管理员来确认。 3. 检查Harbor的配置,查看是否设置了自动清理策略。如果设置了自动清理策略,可以调整策略或者禁用自动清理来避免镜像被删除。 4. 如果以上步骤都没有解决问题,可以尝试重新推送镜像Harbor,并确保推送过程没有任何错误。 通过以上步骤,您应该能够解决镜像push到Harbor后丢失的问题。如果问题仍然存在,建议您联系Harbor的技术支持或者咨询相关专业人士以获取进一步的帮助。 #### 引用[.reference_title] - *1* *2* *3* [如何正确推送镜像到私有仓库Harbor(http方式)](https://blog.csdn.net/Xin_101/article/details/124422018)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值