在 Azure DevOps Pipeline 中将 Docker Image 任务推送到 ACR 失败,并显示“未经授权:需要身份验证”

vil*_*ekr 4 azure-devops

在 Azure DevOps 管道中推送和映像到 Azure 容器注册表任务失败。以前的任务执行得很好,即。docker 镜像创建成功,登录 ACR 成功。但是推送任务失败,结果如下:

unauthorized: authentication required
[error]unauthorized: authentication required
[error]/usr/bin/docker failed with return code: 1
[section]Finishing: Push Docker image
Run Code Online (Sandbox Code Playgroud)

docker push 到给定的 acr 可以从本地命令行正常工作。

# Docker image
# Build a Docker image to deploy, run, or push to a container registry.
# Add steps that use Docker Compose, tag images, push to a registry, run an image, and more:
# https://docs.microsoft.com/azure/devops/pipelines/languages/docker

trigger:
- master

pool:
  vmImage: 'Ubuntu-16.04'

variables:
  imageName: 'renamed:$(build.buildId)'
  azureSubscriptionEndpoint: Renamed
  azureContainerRegistry: renamed.azurecr.io
steps: 
- task: Docker@1
  displayName: Build docker image
  inputs:
    command: Build an image
    dockerFile: Dockerfile
    imageName: $(imageName)
    containerregistrytype: Azure Container Registry
    azureSubscriptionEndpoint: $(azureSubscriptionEndpoint)
    azureContainerRegistry: $(azureContainerRegistry)
- task: Docker@1
  displayName: Login to container registry
  inputs:
    command: login
    containerregistrytype: Azure Container Registry
    azureSubscriptionEndpoint: $(azureSubscriptionEndpoint)
    azureContainerRegistry: $(azureContainerRegistry)
    dockerFile: Dockerfile
    imageName: $(imageName)
- task: Docker@1
  displayName: Push Docker image
  inputs:
    command: Push an image
    containerregistrytype: Azure Container Registry
    azureSubscriptionEndpoint: $(azureSubscriptionEndpoint)
    azureContainerRegistry: $(azureContainerRegistry)
    imageName: $(imageName)
Run Code Online (Sandbox Code Playgroud)

Pro*_*ton 15

我在将 docker 映像推送到Azure 容器注册表时遇到了这个问题。

我收到错误

未经授权:需要身份验证,请访问https://aka.ms/acr/authorization了解更多信息。

这是我修复它的方法

我的用户已经拥有容器注册表的所有者角色,因此我有权推送和拉取映像。

问题是admin_userAzure 容器注册表中未启用该功能。

我所要做的就是启用管理员用户。这会生成usernamepasswordpassword2

在此输入图像描述

接下来,您现在可以使用以下命令登录 Azure 容器注册表:

az acr login --name my-container-registry
Run Code Online (Sandbox Code Playgroud)

标记您的 docker 镜像

docker tag image-name:image-tag my-container-registry.azurecr.io/image-name:image-tag
Run Code Online (Sandbox Code Playgroud)

现在使用以下命令将映像推送到 Azure 容器注册表:

docker push my-container-registry.azurecr.io/image-name:image-tag
Run Code Online (Sandbox Code Playgroud)

就这样


Ste*_*eve 8

我在 Azure DevOps 中使用 Azure 容器注册表服务连接时遇到了同样的问题。

解决方法是在创建 Docker Registry 服务连接时不选择“Azure Container Registry”,而是选择“其他”。然后在 Azure 门户中启用容器注册表上的管理员用户,并使用该凭据创建服务连接。

  • 这个解决方案对我有用。(谢谢,@Steve!)要添加更多细节,为了启用管理员用户选项,请在门户中打开您的容器注册表,转到“访问键”选项卡,然后翻转“管理员用户”开关。用户名(与注册表名称相同)和 2 个密码将出现在切换按钮下方。然后,在服务连接“其他”表单中,输入用户名作为 Docker ID 并使用 2 个密码之一。对于 Docker Registry,使用 ACR 的登录服务器作为 URL,即`https://yourregistry.azurecr.io`。 (2认同)

4c7*_*b41 7

从构建中删除 docker 登录步骤,docker 任务使用 azure 订阅端点为您处理身份验证(如果配置正确),如果没有 - 授予您的服务主体权限acrpush)。


spo*_*ahn 7

区分大小写的问题

\n

我创建了一个 ACR 名称:blaH

\n

我可以登录:az acr login -n blaH

\n
\n

在注册表名称中检测到大写字符。在 docker 命令中使用其服务器 url 时,为避免身份验证错误,请全部使用小写。
\n登录成功

\n
\n

docker build -f Dockerfile -t blaH.azurecr.io/some-app:1.0 ..

\n
\n

未经授权:需要身份验证,请访问https://aka.ms/acr/authorization了解更多信息。

\n
\n

切换为小写h,即docker build -f Dockerfile -t blah.azurecr.io/some-app:1.0 ..& 成功:

\n
\n

1.0:摘要:sha256:b1e6749eae625e6a3fca3eea36466530460e8cd544af67e88687139a37522ba6大小:1495

\n
\n

注意:它甚至告诉我/我们,但我没有读它 \xe2\x80\x8d\xe2\x99\x82\xef\xb8\x8f,请参阅 上 CLI 中以黄色打印的警告acr login

\n

注 2:我在查看 azure 门户时偶然发现了这一点,并注意到login server全是小写:\nAzure 门户登录服务器的屏幕截图

\n

  • 是的。这就是我的目的。必须用全小写重命名/重建/重新标记图像。其他注意事项:您不能只将推送命令更改为全部小写,必须更改图像名称。 (3认同)