You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

BitBucket Pipeline推送Docker镜像至Azure容器注册表遇权限拒绝问题排查

问题描述

我正在学习CI/CD与Docker技术,目前已成功通过相关代码构建Docker镜像。代码托管在BitBucket平台,配置了bitbucket-pipelines.yml尝试将镜像推送至Azure容器注册表,但运行时出现denied: requested access to the resource is denied错误。后续修改了docker-compose.yml和bitbucket-pipelines.yml文件,问题仍未解决,请问我哪里操作不正确?


初始配置文件

Dockerfile

# Docker Operating System
FROM python:3-slim-buster

# Keeps Python from generating .pyc files in the container
ENV PYTHONDONTWRITEBYTECODE=1

# Turns off buffering for easier container logging
ENV PYTHONUNBUFFERED=1

#App folder on Slim OS
WORKDIR /app

# Install pip requirements
COPY requirements.txt requirements.txt
RUN python -m pip install --upgrade pip pip install -r requirements.txt

#Copy Files to App folder
COPY . /app

docker-compose.yml

version: '3.4'

services:
  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    ports:
      - 8000:8000

bitbucket-pipelines.yml

image: atlassian/default-image:2

pipelines:
  branches:
    master:
      - step:
          name: Build And Publish To Azure
          services:
            - docker
          script:
            - docker login -u $AZURE_USER -p $AZURE_PASS xxx.azurecr.io

            - docker build -t xxx.azurecr.io .
            - docker push xxx.azurecr.io

修改后的配置文件

docker-compose.yml

version: '3.4'

services:
  web:
    build: .
    image: xx.azurecr.io/myticket
    container_name: xx
    command: python manage.py runserver 0.0.0.0:80
    ports:
      - 80:80

bitbucket-pipelines.yml

image: atlassian/default-image:2

pipelines:
  branches:
    master:
      - step:
          name: Build And Publish To Azure
          services:
            - docker
          script:
            - docker login -u $AZURE_USER -p $AZURE_PASS xx.azurecr.io

            - docker build -t xx.azurecr.io/xx .
            - docker push xx.azurecr.io/xx

问题排查与解决建议

出现denied: requested access to the resource is denied错误,核心从权限、镜像命名、登录配置三个方向排查:

  • 权限配置问题

    • 检查Azure容器注册表IAM权限:确保$AZURE_USER对应的账户(服务主体或管理员)拥有AcrPush权限。进入Azure门户的容器注册表页面,在「IAM」>「角色分配」中确认该账户已被分配此角色。
    • 验证BitBucket变量:确认$AZURE_USER和$AZURE_PASS已在BitBucket仓库「仓库设置」>「变量」中正确配置,密码无特殊字符导致转义失效。
  • 镜像命名不规范

    • Azure容器注册表镜像必须遵循[注册表地址]/[仓库名]:[标签]格式。初始配置直接用注册表地址作为镜像名(xxx.azurecr.io)不符合推送要求;修改后的xx.azurecr.io/xx建议显式添加标签(比如:latest),避免默认标签引发潜在问题,命令调整为:
      docker build -t xx.azurecr.io/xx:latest .
      docker push xx.azurecr.io/xx:latest
      
  • Docker登录命令格式

    • 建议使用标准docker login格式减少意外错误:
      docker login xx.azurecr.io -u $AZURE_USER -p $AZURE_PASS
      
  • 无关配置修改

    • 当前BitBucket Pipeline流程未使用docker-compose.yml,修改该文件对镜像推送无任何帮助,无需在此花费时间。
  • 注册表地址一致性

    • 确认初始配置的xxx.azurecr.io和修改后的xx.azurecr.io为同一容器注册表,避免拼写错误(少写字符、域名错误)导致推送目标错误。

内容的提问来源于stack exchange,提问作者Isaac Hatilima

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 19:20:32