无法将图像从ACR部署到Azure功能,但使用Azure管道部署到Web应用程序工作正常

2uluyalo  于 2023-08-07  发布在  其他
关注(0)|答案(1)|浏览(120)

我试图使用Azure管道将Azure容器注册表中的映像部署到Azure函数,但它不起作用,下面是我的观察结果:

  • Azure DevOps中的工作是成功的,但我在函数中看不到任何图像。

x1c 0d1x的数据

  • 当部署相同的图像到Web应用程序时,它的工作。这证明这不是服务连接访问的问题。也就是说,它能够从ACR中提取图像。
  • 服务连接具有订阅级访问权限,并且所有资源web app、function和acr都在同一资源组中。
  • 从Advanced Tools-->Current Docker日志输出中,它给了我身份验证问题。但我在ACR中的管理员访问权限已经启用,并且服务连接对于Web应用程序工作正常。

2023-07- 27 T00:01:26.211Z INFO -拉取图像:acrdevintegration.azurecr.io/apiintegtation:1662 2023-07-27T00:01:26.274Z ERROR - DockerApiException:Docker API响应状态码=InternalServerError,response={“message”:“Get“https://acrdevintegration.azurecr.io/v2/apiintegtation/manifests/1662“:unauthorized:需要身份验证,请访问https://aka.ms/acr/authorization以了解详细信息。"}
2023-07-27T00:01:26.274Z ERROR - Pulling docker image acrdevintegration.azurecr.io/apiintegtation:1662 failed:2023-07-27T00:01:26.321Z ERROR - DockerApiException:Docker API响应状态码=InternalServerError,response={“message”:“Get“https://acrdevintegration.azurecr.io/v2/apiintegtation/manifests/1662“:unauthorized:需要身份验证,请访问https://aka.ms/acr/authorization以了解详细信息。"}
2023-07- 27 T00:01:26.321Z警告-图像提取失败。默认为本地副本(如果存在)。2023-07- 27 T00:01:26.322Z错误-图像提取失败:验证docker镜像配置和凭据(如果使用私有存储库)2023-07- 27 T00:01:26.323Z INFO -停止站点azurefunction-dev-integration,因为它在启动期间失败。

  • 下面是我的Azure管道代码,让我知道我错在哪里。

触发器:

  • 试验,试验

资源:

  • repo:self

变量:

dockerRegistryServiceConnection: 'b78ea80b-5431-432a-a2e0-01a948ab3e60'
imageRepository: 'apiintegtation'
containerRegistry: 'acrdevintegration.azurecr.io'
dockerfilePath: '$(Build.SourcesDirectory)/Dockerfile'
tag: '$(Build.BuildId)'
vmImageName: 'ubuntu-latest'

stages:

- stage: Build
  displayName: Build and push stage
  jobs:
  - job: Build
    displayName: Build
    pool:
      vmImage: $(vmImageName)
    steps:
    - task: Docker@2
      displayName: Build an image to container registry
      inputs:
        containerRegistry:  $(dockerRegistryServiceConnection)
        repository: $(imageRepository)
        command: 'build'
        Dockerfile: $(dockerfilePath)
        arguments: '--build-arg FOLDER=weather --build-arg PORT=3000'
        tags: |
          $(tag)
          latest

    - task: Docker@2
      displayName: Push an image to container registry
      inputs:
        containerRegistry: $(dockerRegistryServiceConnection)
        repository: $(imageRepository)
        command: 'push'
        tags: |
          $(tag)
          latest

    - task: AzureWebAppContainer@1
      inputs:
        azureSubscription: 'Integration'
        appName: 'testimage123'
        containers: '$(containerRegistry)/$(imageRepository):$(tag)'

    - task: AzureFunctionAppContainer@1
      inputs:
        azureSubscription: 'Integration'
        appName: 'azurefunction-dev-integration'
        imageName: '$(containerRegistry)/$(imageRepository):$(tag)'

字符串

编辑1:


8aqjt8rx

8aqjt8rx1#

经过大量的故障排除后发现了问题。问题在于这两种资源的创造方式。Web应用程序是使用ACR中的Docker镜像(通过Docker选项卡)创建的,因此Docker用户名/密码和url在启动时嵌入到配置中。因此,随后部署到web应用是成功的,因为它包含ACR凭证。
然而,由于azure函数在创建时不提供docker标签,所以我没有创建任何图像。创建好之后,我使用管道将我的映像部署到函数中。因此,该函数没有ACR凭证,因此部署失败。

学习:

  • 服务连接只负责与azure函数连接。不用于从ACR中提取图像。函数自己完成。因此,永远不要忘记在配置设置中添加ACR凭证。
  • 配置中的应用程序设置预填充了DOCKER_REGISTRY_SERVER_URL、PASSWORD和USERNAME等名称,但值为空。我从来没有点击隐藏值来检查它是否真的有那些用户名和密码。

x1c 0d1x的数据

相关问题