我正在尝试创建计划的 ACR 任务以使用以下命令从存储中删除旧图像:
PURGE_CMD="acr purge --filter 'worker:.*' --untagged --ago 1d"
az acr task create --name remove_old_images_worker --cmd "$PURGE_CMD" --schedule
"0 0 * * *" --registry registry --context /dev/null
但它返回给我一个错误:
acb.yaml does not exist.
同样有趣的是,就在几天前,它还适用于类似的任务。
错误消息“acb.yaml 不存在”意味着 Azure CLI 期望在您指定的上下文位置中找到
acb.yaml
文件。如果您指定 /dev/null
作为上下文,则不清楚为什么 CLI 会期望在那里找到文件,除非 CLI 或 ACR 服务存在错误或临时问题。使用 Azure CLI 在 Azure 容器注册表 (ACR) 中创建计划任务时,--context
参数用于指定源代码的位置,该位置通常包含 acb.yaml
但是,对于仅运行命令而不需要构建上下文的清除任务,您应该使用特殊值
--context /dev/null
。
不要使用
/dev/null
,而是尝试使用带有空 acb.yaml
文件的虚拟上下文:
mkdir dummy-context
touch dummy-context/acb.yaml
az acr task create \
--name remove_old_images_worker \
--registry <registryname>\
--cmd "$PURGE_CMD" \
--schedule "0 0 * * *" \
--context /dev/null \
--commit-trigger-enabled false \
--pull-request-trigger-enabled false
不用说,下面的事情必须首先确保。
此外,请确保您在
acb.yaml
文件所在的正确目录中运行该命令。如果您从不同的目录运行该命令,则可能需要使用 acb.yaml
参数指定 --context
文件的完整路径。
参考资料: