当前位置: 首页 > 知识库问答 >
问题:

将容器推到Azure容器注册表时拒绝资源访问

郑衡
2023-03-14

当使用Docker Compose将容器推入私有Azure容器注册表时,Azure DevOps管道返回以下错误:

正在推送[容器]([注册表]/[应用程序]:最新)...

推送引用存储库[docker.io/[registry]/[container]]

拒绝:对资源的访问请求被拒绝

azure-pipeline.yml文件取自Microsoft Microservices eShopOnContainer示例中所示的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角色中。

共有1个答案

龚鸿羽
2023-03-14

解决方案是显式地使用容器名称。文档是误导性的,因为它首先声明:ContainerRegistryType默认情况下是Azure容器注册表。该示例继续将Contoso作为AzureContainerRegistry的值。

这是不对的。您需要将其显式设置为Azure中的“login server”值。因此,注册表应该是“contoso.azurer.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)

这就是为什么它所提到的push repo实际上是:docker.io(public docker hub),因为它实际上必须是默认的whch解释了拒绝访问错误。

 类似资料:
  • 主要内容:部署注册表容器注册表是一个存储和内容交付系统,它存储他们的Docker(它是用于运行应用程序的预定义图像的数据库)。 部署注册表 可以使用以下命令部署注册表: 步骤(1): 首先,使用SSH(Secure Shell)登录到您的GitLab服务器。 步骤(2): 现在使用以下命令启动注册表容器: 将第一部分指定为主机端口,将第二部分指定为容器内的端口。 当Docker重新启动时,标志会自动重新启动注册表。

  • 谁能建议一下。为什么我可以从ec2实例访问s3,但不能从运行在同一ec2实例上的容器访问s3。

  • 我按照这个链接创建我的第一个docker映像,它成功了,现在我正试图从这个链接将这个映像推送到我的docker存储库中。但每当我试图将此图像推入存储库时,就会出现这种类型的错误。 有人能给我一些关于这个问题的提示吗?任何帮助都将不胜感激。 注意:我已成功登录docker

  • 我正在尝试实现一个检查一些东西的ContainerRequest estFilter。最终,它将验证一个令牌,但我还没有到那里。该过滤器在Grizzly HTTP Server(Grizzly 2.3.4)上运行,位于JAX-RS资源(泽西2.0)前面。我也在使用Guice 3.0。 当我尝试将 javax.ws.rs.container.ResourceInfo 注入到过滤器中时,它为空。 将请

  • 从我的spring-boot应用程序容器连接到Rabbitmq时,我遇到了一个错误。 我在docker compose文件中附加了两个docker容器(Rabbitmq和spring-boot应用程序)和网桥网络: 当我的Spring Boot应用程序尝试连接到后者时,Rabbitmq拒绝了连接。日志下方: 当我在我的spring boot应用程序容器(在我的例子中是orchestrator)中执