博客主页:https://tomcat.blog.csdn.net
博主昵称:农民工老王
主要领域:Java、Linux、K8S
期待大家的关注点赞收藏⭐留言
最近的工作中,需要获取Docker Registry中全部镜像的带tag的清单。我在网上找了许久,只找到一些shell脚本,且在实践中发现不可用。
最后我自己写了一个java方法,成功实现了这一需求。
下列代码中,使用了一个叫HttpUtils.sendGet的方法。这是我自己实现的一个HTTP请求工具。其代码参见我的另一篇博客:Java原生HttpClient使用示例(右侧标题含有超链接,可以直接点击跳转)。
public void getImagesFromRegistry(String regHost,String user,String password) throws Exception {
String auth = "Basic " + Base64.getEncoder().encodeToString((user + ":" + password).getBytes(StandardCharsets.UTF_8));
HashMap<String, String> headers = new HashMap<>();
headers.put("Authorization", auth);
HttpResponse<String> catalogResp = HttpUtils.sendGet(regHost + "/v2/_catalog", headers);
List<String> strings = JSONObject.parseObject(catalogResp.body()).getJSONArray("repositories").toJavaList(String.class);
HashMap<String, List<String>> result = new HashMap<>();
for (String image : strings) {
String urlForImageInfo = regHost + "/v2/" + image + "/tags/list";
HttpResponse<String> infoResp = HttpUtils.sendGet(urlForImageInfo, headers);
List<String> tags = JSONObject.parseObject(infoResp.body()).getJSONArray("tags").toJavaList(String.class);
result.put(image, tags);
}
for (String key : result.keySet()) {
for (String t : result.get(key)) {
System.out.println(key + ":" + t);
}
}
}
如需转载,请注明本文的出处:农民工老王的CSDN博客https://blog.csdn.net/monarch91 。