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容器注册表IAM权限:确保
镜像命名不规范
- Azure容器注册表镜像必须遵循
[注册表地址]/[仓库名]:[标签]格式。初始配置直接用注册表地址作为镜像名(xxx.azurecr.io)不符合推送要求;修改后的xx.azurecr.io/xx建议显式添加标签(比如:latest),避免默认标签引发潜在问题,命令调整为:docker build -t xx.azurecr.io/xx:latest . docker push xx.azurecr.io/xx:latest
- Azure容器注册表镜像必须遵循
Docker登录命令格式
- 建议使用标准
docker login格式减少意外错误:docker login xx.azurecr.io -u $AZURE_USER -p $AZURE_PASS
- 建议使用标准
无关配置修改
- 当前BitBucket Pipeline流程未使用
docker-compose.yml,修改该文件对镜像推送无任何帮助,无需在此花费时间。
- 当前BitBucket Pipeline流程未使用
注册表地址一致性
- 确认初始配置的
xxx.azurecr.io和修改后的xx.azurecr.io为同一容器注册表,避免拼写错误(少写字符、域名错误)导致推送目标错误。
- 确认初始配置的
内容的提问来源于stack exchange,提问作者Isaac Hatilima
相关产品推荐
相关产品推荐

