常用 CLI 命令操作
使用 ac CLI 进行平台登录、命名空间权限管理以及 Registry 元数据操作。对于 push 和 pull 等镜像传输操作,请使用标准 OCI 客户端,例如 nerdctl。
以下示例默认假设:
- Registry 客户端地址:
<REGISTRY_CLIENT_HOSTPORT> - Registry API URL:
<REGISTRY_API_URL> - 当前命名空间:
my-ns
开始之前
在运行本文档中的命令之前,请确保:
- 已安装
ac。 - 如果需要 push 或 pull 镜像,请安装
nerdctl。 - 当前环境可以访问 ACP API 端点和 Registry 地址。
- 已登录 ACP 并选择了目标集群。
- 当前 ACP 账号,或 Pod 或 Job 中使用的 ServiceAccount,具有所需的命名空间权限。
典型的权限要求:
- 拉取镜像:
system:image-puller - 推送镜像:
system:image-pusher - 使用
ac get images列出镜像:需要具备访问-n指定命名空间的权限;仅当需要扫描当前用户可访问的所有命名空间时,才使用-A
如果在 Pod、Job 或 CronJob 中运行 ac:
- Pod 必须使用有效的
serviceAccountName。 - 挂载的 ServiceAccount token 必须可用。
- 该 ServiceAccount 必须具有访问目标集群以及 Registry 相关 API 的权限。
身份验证的工作方式
ac 和 nerdctl 使用不同的身份验证路径:
ac使用当前 ACP 登录会话访问 Registry 相关 API。- 如果
ac在 Pod 内运行且没有可用的 ACP 会话,则可以回退使用已挂载的 ServiceAccount token。 nerdctl直接向 Registry 进行身份验证,通常使用已具有目标命名空间访问权限的相同 ACP 账号凭据。
本文档中的地址用法:
<REGISTRY_CLIENT_HOSTPORT>是 OCI 客户端(例如nerdctl)使用的 Registry 地址。<REGISTRY_API_URL>是ac get images使用的 Registry API 端点。- 在外部访问场景中,
ac通常应显式指定--registry-url,而不是依赖默认的集群内 Registry 地址。
对 ACP 进行身份验证
在使用 ac 中与 Registry 相关的命令之前,请先登录并选择目标集群:
登录后,ac 可以使用当前会话访问诸如 ac get images 之类的 Registry 相关 API。
为用户授予命名空间权限
为用户添加命名空间拉取权限。
为用户添加命名空间推送权限。
为 ServiceAccount 授予命名空间权限
为 ServiceAccount 添加命名空间拉取权限。
为 ServiceAccount 添加命名空间推送权限。
对 OCI 客户端进行身份验证
对于镜像的 push 和 pull,请使用具有目标命名空间访问权限的相同 ACP 账号凭据:
如果 Registry 使用自签名证书或纯 HTTP,请添加全局标志 --insecure-registry。
示例:
列出镜像
为获得更好的性能,请尽可能查询特定命名空间:
如果当前上下文已经指定了目标命名空间,则可以省略 -n。如果当前上下文未指定命名空间,则使用 default。
仅当需要列出当前用户有权限访问的所有命名空间中的镜像时,才使用 -A。在包含大量命名空间或仓库的集群上,这可能会更慢。
默认情况下,输出仅包含 REPOSITORY 和 TAG 列。日常查询请保持默认输出。仅在需要创建时间和 digest 元数据时才添加 -o wide,因为这需要额外的元数据查找,并可能增加命令延迟。
当自动化流程需要机器可读数据时,请使用结构化输出:
对于 JSON 和 YAML 输出,默认输出也仅包含 repository 和 tag 字段。仅在需要 digest 和创建时间元数据时才使用 -o wide。
对于大型 Registry,您可以调整 Registry catalog 的分页大小。默认值为 200。除非需要更大的 catalog 页面,否则不要增大该值。
当 ac 在集群外运行时,建议显式指定 --registry-url。否则,CLI 可能会回退到默认的集群内 Registry 地址,而该地址通常无法从本地工作站访问。
拉取镜像
使用 nerdctl 从 Registry 拉取镜像:
推送镜像
将本地镜像推送到当前命名空间:
将另一个 Registry 中的镜像复制到 ACP Registry: