未向 AAD 注册的 Azure 应用程序

Raj*_*h M 15 azure azure-active-directory azure-container-registry

登录到容器注册表时出现以下错误

命令:

docker login <MY_REGISTRY_NAME>.azurecr.io
Run Code Online (Sandbox Code Playgroud)

错误信息:

Error response from daemon: Get https://<MY_REGISTRY_NAME>.azurecr.io/v2/: unauthorized: Application not registered with AAD
Run Code Online (Sandbox Code Playgroud)

Anu*_*epa 25

转到 Container Registry 中的 Access Keys 并启用 admin 用户,然后使用自动生成的凭据通过 Docker 登录

  • 这对 Active Directory 身份验证有何帮助?当然,它允许您创建一个“管理员”用户,并使用密码将其传递给组织中的每个人?这是一个可怕的建议。 (3认同)

ben*_*cin 10

长话短说

检查身份验证选项的详细信息和登录故障排除文档。下面提到的解决方案适用于使用 Azure AD for Docker 和 Helm 进行单独登录。


尽管@Anudeepa接受的答案解决了该问题,但这不是管理员帐户的预期目的(请参阅文档):

管理员帐户是为单个用户访问注册表而设计的,主要用于测试目的。我们不建议在多个用户之间共享管理员帐户凭据。使用管理员帐户进行身份验证的所有用户都显示为具有对注册表的推拉访问权限的单个用户。更改或禁用此帐户会禁用所有使用其凭据的用户的注册表访问权限。对于无头场景,建议用户和服务主体使用个人身份。

因此,解决该问题的第一个地址应该是解决登录问题的文档。上述错误消息Error response from daemon: Get https://<MY_REGISTRY_NAME>.azurecr.io/v2/: unauthorized: Application not registered with AAD可能有多种原因。

请记住,有多种选项可用于对 ACR 进行身份验证

我认为问题涉及 1)使用 Azure AD 单独登录或 2)服务主体

我的问题是个人登录,因为有一个问题。您的用户名必须是00000000-0000-0000-0000-000000000000(这不是您自己 ID 的占位符)。以下内容为我修复了错误:

USER_NAME="00000000-0000-0000-0000-000000000000"
PASSWORD=$(az acr login --name <MY_REGISTRY_NAME> \
--expose-token \
--output tsv \
--query accessToken)

echo "$PASSWORD" | docker login <MY_REGISTRY_NAME>.azurecr.io \
--username "$USER_NAME" \
--password-stdin

echo "$PASSWORD" | helm registry login tacto.azurecr.io \
--username "$USER_NAME" \
--password-stdin
Run Code Online (Sandbox Code Playgroud)


Kev*_*rns 8

对我来说,让一切顺利进行的最简单方法是在https://docs.docker.com/cloud/aci-integration/上阅读来自 Docker 的文档。实际上,您所要做的就是在 Azure 中创建容器,打开 PowerShell(如果还没有,请安装/导入 azure 模块)并运行命令“docker login azure”。这将弹出一个浏览器窗口,您可以从那里直接登录到您的容器。我还没有尝试过有多个容器,因为到目前为止我只需要一个,但我无法想象这会很困难。


Luk*_*ner 5

如果您使用完整的注册表名称(例如registryname.azurecr.io作为用户名而不是仅仅),则可能会发生这种情况registryname

错误消息非常不正确!