我有一个运行的Azure CLI容器。我想向容器发送2个命令;
az resource list --tag az=test --query "[].id" -otsv
的资源az resource delete --ids $(az resource list --tag az=test --query "[].id" -otsv)
的资源我的图像/容器具有编码到其中的环境变量,因此如果我要运行任何Az命令,它将针对保存在其中的服务主体运行。
如果我要登录容器并在一行中运行命令,它将正常工作:
λ docker run -it asdf sh
/bin # az resource delete --ids $(az resource list --tag az=test --query "[].id" -otsv)
/bin #
但是,如果我要在容器(或图像)之外运行命令,它将要求我登录到Az CLI:
λ docker run asdf az resource delete --ids $(az resource list --tag az=test --query "[].id" -otsv)
Please run 'az login' to setup account.
ERROR: az resource delete: error: argument --ids: expected at least one argument
usage: az resource delete [-h] [--verbose] [--debug]
[--output {json,jsonc,table,tsv}] [--query JMESPATH]
[--ids RESOURCE_IDS [RESOURCE_IDS ...]]
[--resource-group RESOURCE_GROUP_NAME]
[--namespace RESOURCE_PROVIDER_NAMESPACE]
[--parent PARENT_RESOURCE_PATH]
[--resource-type RESOURCE_TYPE]
[--name RESOURCE_NAME] [--api-version API_VERSION]
[--subscription _SUBSCRIPTION]
似乎bash看着$(..)
命令,并没有将它发送到图像/容器。我已经尝试用\
转义字符,但它会带回一些其他随机错误,我知道-otsv
确实有效。
λ docker run asdf az resource delete --ids \$\(az resource list --tag az=test --query "[].id" -ots
v\)
ERROR: az resource delete: 'tsv)' is not a valid value for '--output'. See 'az resource delete --help'.
The most similar choice to 'tsv)' is:
tsv
我是Bash的新手,我通常使用PowerShell,但这次我们必须使用Bash。通常在PowerShell中,我可以将搜索结果传输到另一个命令来删除资源,所有这些都在一行...但是,我不知道在这种情况下如何做到这一点。
请问有什么想法吗?
仅供参考:我将从Azure Functions向此运行容器发送自动命令以执行所述资源的删除,因此我无法运行交互式shell。
错误说明原因。如果要在容器中执行azure Cli,可以使用命令docker exec -it containerName bash
连接到容器,或者您可以执行您的操作。但总而言之,您应首先登录Azure CLI。
对于第二个错误,参数应为-o tsv
。
更新1
我测试命令docker run imageName az resource delete
,结果给出唯一的错误,请运行'az login'来设置帐户。
因此,无论您想要使用Azure CLI做什么,都应该先登录。
更新2
为此,您可以在两个命令行之间添加&
。整个命令都是这样的:
docker run docker_image_name az login & az resource delete --ids $(az resource list --name resource_name --query "[].id" -o tsv)
因为两个命令az login
将首先执行,所以你必须先登录。但不要担心,第二个命令也将在您登录后执行。
经过跟踪后,我终于回到了这里。原来它是需要的引号;
docker run -it asdf bash -c 'az resource delete --ids $(az resource list --tag az=test --query "[].id" -otsv)'
感谢这个给我这个想法; Execute two commands with docker exec