我试图使用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:
的
1条答案
按热度按时间8aqjt8rx1#
经过大量的故障排除后发现了问题。问题在于这两种资源的创造方式。Web应用程序是使用ACR中的Docker镜像(通过Docker选项卡)创建的,因此Docker用户名/密码和url在启动时嵌入到配置中。因此,随后部署到web应用是成功的,因为它包含ACR凭证。
然而,由于azure函数在创建时不提供docker标签,所以我没有创建任何图像。创建好之后,我使用管道将我的映像部署到函数中。因此,该函数没有ACR凭证,因此部署失败。
学习:
x1c 0d1x的数据