如何获取Docker Registry的带tag的镜像清单

博客主页:https://tomcat.blog.csdn.net
博主昵称:农民工老王
主要领域:Java、Linux、K8S
期待大家的关注点赞收藏⭐留言
如何获取Docker Registry的带tag的镜像清单_第1张图片

最近的工作中,需要获取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);
        }
    }
}

测试结果表明实现目标:
如何获取Docker Registry的带tag的镜像清单_第2张图片


如需转载,请注明本文的出处:农民工老王的CSDN博客https://blog.csdn.net/monarch91 。

你可能感兴趣的:(Linux,docker,java)