使用Docker Compose将容器推入私有Azure容器注册表时,Azure DevOps管道返回以下错误:
按下[容器]([注册表] / [应用]:最新)...
此推送指向存储库[docker.io/[registry] / [container]]
拒绝:请求的对资源的访问被拒绝
azure-pipeline.yml
文件摘自Microsoft Microservices eShopOnContainer示例here中显示的Docker Compose示例:
variables:
azureContainerRegistry: myregistry
azureSubscriptionEndpoint: My Service Principle
...
task: DockerCompose@0
displayName: Compose push customer API
inputs:
containerregistrytype: Azure Container Registry
azureSubscriptionEndpoint: $(azureSubscriptionEndpoint)
azureContainerRegistry: $(azureContainerRegistry)
dockerComposeCommand: 'push [container]'
dockerComposeFile: docker-compose.yml
qualifyImageNames: true
projectName: ""
dockerComposeFileArgs: |
TAG=$(Build.SourceBranchName)
服务原则在AcrPush role中。
答案 0 :(得分:0)
解决方案是使用容器名称明确显示。 documentation具有误导性,因为它首先指出:containerregistrytype
默认为 Azure容器注册表。该示例继续给出 Contoso 作为azureContainerRegistry
的值。
这是错误的。您需要将其显式设置为Azure中的“登录服务器”值。因此,注册表应为“ contoso.azurecr.io”。因此完整的示例应该应该是:
variables:
azureContainerRegistry: contoso.azurecr.io
azureSubscriptionEndpoint: Contoso
steps:
- task: DockerCompose@0
displayName: Container registry login
inputs:
containerregistrytype: Azure Container Registry
azureSubscriptionEndpoint: $(azureSubscriptionEndpoint)
azureContainerRegistry: $(azureContainerRegistry)
这就是为什么它所指的推回购实际上是:docker.io(公共Docker集线器),因为它实际上必须是默认值,这说明了拒绝访问错误。