使用服务主体将容器上传到 ACR 需要什么?

What all is needed to upload containers to ACR with a Service Principle?

我正在尝试创建一个容器并将其推送到 Azure 容器注册表。我已经创建了一个容器组和服务原则,但我无法使 docker push 工作。

> docker login azure --client-id 12345678-90ab-cdef-1234-567890abcdef --client-secret b1bb1ty~b0pp1ty_b00. --tenant-id 01234567-89ab-cdef-0123-456789abcdef
login succeeded
> docker push myrepo.azurecr.io/my_image
Using default tag: latest
The push refers to repository [myrepo.azurecr.io/my_image]
17e1b7f147c1: Preparing
7497d9224318: Preparing
4f70bf18a087: Preparing
f2a9a0445b79: Preparing
24d83d67379e: Preparing
45c2210a0dee: Waiting
5cb3a39200e1: Waiting
c203d67ebc1d: Waiting
281bff2725de: Waiting
unauthorized: authentication required, visit https://aka.ms/acr/authorization for more information.

Service Principle关联的应用程序在容器组中具有Owner角色,所以它应该可以做任何它想做的事情,包括推送图片,但我仍然得到上面的错误信息,link 它包含的内容没有说明任何关于该主题的特别有用的内容。我已在容器组上启用诊断事件日志记录,但我的尝试未生成任何诊断信息。

在我能够成功将图像推送到 ACR 之前还需要做什么?

我认为问题与您执行注册表登录的方式有关。

如您在 Azure or Docker 文档中所见,您的 docker login 命令应类似于以下内容:

docker login myrepo.azurecr.io \
  --username <your service principal client id> \
  --password <your service principal client secret>