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

GitHub Workflow推送镜像至Azure容器注册表遇权限拒绝问题求助

解决GitHub Workflow推送镜像到Azure容器注册表的权限拒绝问题

问题现象

使用GitHub Workflow构建ASP.NET 6项目,通过Dockerfile生成镜像并推送到私有Azure容器注册表时,触发以下错误:

buildx failed with: error: denied: requested access to the resource is denied

已在仓库Secrets > Action中配置ACR_HOST、ACR_USERNAME、ACR_PASSWORD密钥,本地使用相同凭证可正常推送,但Workflow中推送失败,且Azure门户无该Workflow的登录记录,怀疑docker/build-push-action@v3.1.1未使用之前的登录状态。

初始Workflow配置如下:

name: Docker Image CI

on:
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
    - name: Login To Azure Container Registr 
      uses: Azure/docker-login@v1 
      with:
        login-server: ${{ secrets.ACR_HOST }}
        username: ${{ secrets.ACR_USERNAME }}
        password: ${{ secrets.ACR_PASSWWORD }} 
    - name: Build And Push Docker Images
      uses: docker/build-push-action@v3.1.1
      with:
        push: true
        file: ./Dockerfile
        tags: companyname/projectname:${{ github.run_number }}

解决方案

1. 修正Secrets引用拼写错误

初始配置中密码字段拼写错误:ACR_PASSWWORD多了一个W,应改为ACR_PASSWORD,这会直接导致登录失败,后续推送无权限。

2. 确保镜像Tag包含ACR登录地址

镜像Tag必须以你的Azure容器注册表登录服务器地址开头,否则Docker会默认尝试推送到Docker Hub,而非私有ACR。修正后的Tag格式应为:

tags: ${{ secrets.ACR_HOST }}/companyname/projectname:${{ github.run_number }}

3. 改用官方Docker登录Action提升兼容性

Azure/docker-login@v1与docker/build-push-action的兼容性可能存在问题,建议替换为官方的docker/login-action:

- name: Login to Azure Container Registry
  uses: docker/login-action@v2
  with:
    registry: ${{ secrets.ACR_HOST }}
    username: ${{ secrets.ACR_USERNAME }}
    password: ${{ secrets.ACR_PASSWORD }}

4. 完整修正后的Workflow配置

name: Docker Image CI

on:
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
    - name: Login to Azure Container Registry
      uses: docker/login-action@v2
      with:
        registry: ${{ secrets.ACR_HOST }}
        username: ${{ secrets.ACR_USERNAME }}
        password: ${{ secrets.ACR_PASSWORD }}
    - name: Verify Docker Login Status
      run: docker info | grep -i "${{ secrets.ACR_HOST }}"
    - name: Build And Push Docker Images
      uses: docker/build-push-action@v3.1.1
      with:
        push: true
        file: ./Dockerfile
        tags: ${{ secrets.ACR_HOST }}/companyname/projectname:${{ github.run_number }}

5. 额外验证步骤

添加Verify Docker Login Status步骤可以确认Docker是否已成功登录到目标ACR,便于排查登录环节的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 21:39:17