You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Google Artifact Registry Python客户端查询Docker镜像的问题

使用Google Artifact Registry Python客户端获取唯一镜像名及虚拟仓库上游镜像

一、仅列出仓库中唯一的镜像名称

当前list_docker_images会返回所有镜像的所有版本,要获取唯一镜像名称需要手动解析并去重,metadata参数无法直接实现这个需求——它主要用于配置请求元数据(比如重试策略、超时设置等),不支持对返回结果进行过滤或去重。

具体实现步骤:

  • 调用list_docker_images获取仓库内所有镜像条目
  • 从每个镜像的name字段中提取基础镜像名(剥离仓库路径、标签和摘要信息)
  • 利用集合的自动去重特性,整理出唯一名称列表

示例代码:

from google.cloud import artifactregistry_v1

def get_unique_docker_image_names(project_id, location, repo_name):
    # 初始化客户端
    client = artifactregistry_v1.ArtifactRegistryClient()
    # 构造仓库的父路径
    parent = client.repository_path(project_id, location, repo_name)
    
    # 获取仓库内所有Docker镜像
    all_images = client.list_docker_images(parent=parent)
    
    unique_names = set()
    for image in all_images:
        # 解析镜像名称:从完整路径中提取最后一段,再剥离标签/摘要
        image_full_part = image.name.split("/")[-1]
        # 兼容带标签(如:v1)或摘要(如@sha256:...)的格式
        base_name = image_full_part.split(":")[0].split("@")[0]
        unique_names.add(base_name)
    
    # 返回排序后的唯一名称列表
    return sorted(unique_names)

# 调用示例
unique_images = get_unique_docker_image_names("你的项目ID", "你的区域", "你的仓库名")
for name in unique_images:
    print(name)

二、从虚拟仓库列出包含上游仓库的镜像

可以实现,但需要在调用list_docker_images时指定view=FULL参数。默认的BASIC视图仅返回虚拟仓库自身存储的镜像,而FULL视图会包含所有已配置的上游仓库中的镜像(前提是虚拟仓库已正确关联上游源)。

示例代码:

from google.cloud import artifactregistry_v1

def list_virtual_repo_all_images(project_id, location, virtual_repo_name):
    client = artifactregistry_v1.ArtifactRegistryClient()
    parent = client.repository_path(project_id, location, virtual_repo_name)
    
    # 使用FULL视图获取包含上游仓库的所有镜像
    all_images = client.list_docker_images(
        parent=parent,
        view=artifactregistry_v1.DockerImageView.FULL
    )
    
    # 同样处理去重,获取唯一镜像名称
    unique_names = set()
    for image in all_images:
        image_full_part = image.name.split("/")[-1]
        base_name = image_full_part.split(":")[0].split("@")[0]
        unique_names.add(base_name)
    
    return sorted(unique_names)

# 调用示例
virtual_repo_images = list_virtual_repo_all_images("你的项目ID", "你的区域", "你的虚拟仓库名")
for name in virtual_repo_images:
    print(name)

注意:需确保虚拟仓库已在GCP控制台或通过API配置了需要聚合的上游仓库,否则FULL视图只会返回虚拟仓库自身的镜像。

内容的提问来源于stack exchange,提问作者Muad Mazahir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 11:52:35