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

推送自定义镜像至Azure ACR失败及GitHub Actions异常求助

问题解决指南

一、原WiFi下ACR推送失败("Use of closed network connection")的修复

可能原因

原WiFi大概率存在以下限制:

  • 防火墙/代理拦截了Docker与ACR的HTTPS连接(ACR默认使用443端口)
  • WiFi DNS解析异常,无法正确识别ACR注册表域名
  • 网络稳定性差,TCP连接中途中断

配置步骤

  1. 检查防火墙与端口权限
    • 确认WiFi允许出站访问443端口
    • 企业WiFi环境下,联系管理员将ACR域名加入白名单,或放行Docker相关出站规则
  2. 配置Docker代理(若WiFi需代理)
    • 找到对应系统的Docker配置文件:
      • Linux:~/.docker/config.json
      • Windows:C:\Users\<你的用户名>\.docker\config.json
      • macOS:~/.docker/config.json
    • 添加代理配置(替换为你的代理地址):
      {
        "proxies": {
          "default": {
            "httpProxy": "http://proxy.example.com:8080",
            "httpsProxy": "http://proxy.example.com:8080",
            "noProxy": "localhost,127.0.0.1,你的ACR名称.azurecr.io"
          }
        }
      }
      
    • 重启Docker服务使配置生效
  3. 修复DNS解析问题
    • 将WiFi DNS服务器改为公共DNS(如8.8.8.8或1.1.1.1),测试ACR域名解析:
      nslookup 你的ACR名称.azurecr.io
      
    • 确认解析结果正确后,重新尝试推送
  4. 重新验证ACR登录状态
    • 重新登录ACR确保会话有效:
      az acr login --name 你的ACR名称
      
    • 执行推送命令:
      docker tag 你的镜像:标签 你的ACR名称.azurecr.io/你的镜像:标签
      docker push 你的ACR名称.azurecr.io/你的镜像:标签
      

二、GitHub Actions构建镜像失败(URL/凭据问题)的修复

核心排查点

Actions运行环境独立于本地,需确认:

  • ACR登录服务器URL配置完全正确
  • GitHub Secrets中存储的凭据有效且权限足够
  • Workflow文件中的ACR域名、镜像标签无拼写错误

解决方案

  1. 确认ACR登录服务器URL
    • 在Azure门户ACR概览页复制登录服务器地址(格式:你的ACR名称.azurecr.io),确保Workflow中完全一致,无多余斜杠或拼写错误
  2. 检查GitHub Secrets配置
    • 进入GitHub仓库 → Settings → Secrets and variables → Actions
    • 确认已添加必要Secrets:
      • 若用服务主体登录:AZURE_CLIENT_ID、AZURE_TENANT_ID、AZURE_SUBSCRIPTION_ID
      • 若用ACR管理员凭据:ACR_USERNAME、ACR_PASSWORD(建议优先使用服务主体,权限更可控)
  3. 修正Workflow文件
    • 用Azure/login动作登录的示例:
      - name: Azure Login
        uses: azure/login@v1
        with:
          creds: ${{ secrets.AZURE_CREDENTIALS }}
      - name: Build and push to ACR
        uses: azure/acr-build@v1
        with:
          registry: 你的ACR名称.azurecr.io
          image: 你的镜像:${{ github.sha }}
          dockerfile: ./Dockerfile
          context: .
      
    • 用Docker直接登录ACR的示例:
      - name: Login to ACR
        uses: docker/login-action@v2
        with:
          registry: 你的ACR名称.azurecr.io
          username: ${{ secrets.ACR_USERNAME }}
          password: ${{ secrets.ACR_PASSWORD }}
      - name: Build and push
        uses: docker/build-push-action@v4
        with:
          context: .
          push: true
          tags: 你的ACR名称.azurecr.io/你的镜像:${{ github.sha }}
      
  4. 验证服务主体权限
    • 若使用服务主体,确保其拥有ACR的AcrPush角色权限:
      az role assignment create --assignee <服务主体客户端ID> --scope /subscriptions/<订阅ID>/resourceGroups<资源组名称>/providers/Microsoft.ContainerRegistry/registries/<ACR名称> --role AcrPush
      
  5. 测试Workflow
    • 手动触发Workflow运行,查看日志中的具体错误,精准定位URL、凭据或权限问题

内容的提问来源于stack exchange,提问作者KASMI G.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 13:50:29