无法通过docker.io镜像创建Azure容器实例问题求助
我们的Azure YAML流水线用于从Docker Hub创建容器实例,7月1日运行正常,但7月2日开始抛出以下错误:
ERROR: (RegistryErrorResponse) An error response is received from the docker registry 'docker.io'. Please retry later.
Code: RegistryErrorResponse
Message: An error response is received from the docker registry 'docker.io'. Please retry later.
使用的AzureCLI@2任务配置如下:
- task: AzureCLI@2 name: CreateContainer displayName: Create container inputs: azureSubscription: ${{ parameters.subscription }} scriptType: bash scriptLocation: inlineScript inlineScript: | az container create \ --resource-group '${{ parameters.resourceGroup }}' \ --name '${{ parameters.name }}' \ --image 'docker.io/mockoon/cli:latest' \ --ports ${{ parameters.port }} \ --location '${{ parameters.location }}' \ --dns-name-label '${{ parameters.name }}' \ --command-line "mockoon-cli start --data '$(publicUrl)' --port ${{ parameters.port }}"
已尝试更换镜像标签(如8.2.0、8.1.1),结果相同;且Docker状态页面显示所有系统正常运行。
以下是可行的排查和解决方法:
检查Azure区域的Docker Hub访问状态
即使Docker Hub全局状态正常,部分Azure区域可能存在临时网络波动或访问限制。可以尝试切换到其他Azure区域运行流水线,或查看对应区域的Azure服务状态公告。添加Docker Hub认证信息
Docker Hub对未认证请求有严格的速率限制,近期请求量上升可能触发限制。在az container create命令中添加认证参数,提升请求配额:az container create \ --resource-group '${{ parameters.resourceGroup }}' \ --name '${{ parameters.name }}' \ --image 'docker.io/mockoon/cli:latest' \ --ports ${{ parameters.port }} \ --location '${{ parameters.location }}' \ --dns-name-label '${{ parameters.name }}' \ --command-line "mockoon-cli start --data '$(publicUrl)' --port ${{ parameters.port }}" --registry-login-server docker.io \ --registry-username <你的Docker Hub用户名> \ --registry-password <你的Docker Hub访问令牌>改用Azure容器注册表(ACR)代理镜像
将Docker Hub镜像同步到ACR,通过ACR拉取镜像可绕过Docker Hub的直接访问限制,同时利用Azure内部网络的稳定性:- 创建ACR实例
- 执行
az acr import --name <你的ACR名称> --source docker.io/mockoon/cli:latest --image mockoon/cli:latest导入镜像 - 修改流水线中
--image参数为你的ACR名称.azurecr.io/mockoon/cli:latest
添加脚本重试逻辑
临时网络波动可能导致单次请求失败,在脚本中添加循环重试:until az container create \ --resource-group '${{ parameters.resourceGroup }}' \ --name '${{ parameters.name }}' \ --image 'docker.io/mockoon/cli:latest' \ --ports ${{ parameters.port }} \ --location '${{ parameters.location }}' \ --dns-name-label '${{ parameters.name }}' \ --command-line "mockoon-cli start --data '$(publicUrl)' --port ${{ parameters.port }}"; do echo "创建失败,10秒后重试..." sleep 10 done升级Azure CLI版本
旧版本Azure CLI可能存在兼容性问题,在任务开头添加升级命令:az upgrade --yes
内容的提问来源于stack exchange,提问作者dq101

