使用Azure PowerShell部署容器组时遇InaccessibleImage错误求助
问题背景
按照官方指南部署带HTTPS访问的边车容器,使用推送到Azure容器注册表(ACR)的自有公开镜像,执行命令:
az container create --resource-group <myResourceGroup> --file deploy-aci.yaml
报错:
(InaccessibleImage) 容器组'app-with-ssl'中的镜像'my-registry/my-image:latest'无法访问,请检查镜像和注册表凭证。
尝试添加注册表凭证执行命令仍报错:
az container create --resource-group my-resource-group --file deploy-aci.yaml --registry-login-server my-server.azurecr.io --registry-username my-registry --registry-password my-password
本地可正常拉取该公开镜像,ACR为Basic定价(无法设为私有),凭证确认正确。
排查方向
确认ACR镜像地址完整性
ACR镜像的标准格式为<ACR登录服务器>/<镜像名>:<标签>,检查YAML中my-container的image字段是否为完整地址,应改为my-server.azurecr.io/my-image:latest,避免因缺少登录服务器前缀导致ACI无法定位镜像源。检查ACR网络访问策略
即使ACR设为公开,若配置了网络限制(如仅允许特定IP/虚拟网络访问),ACI的公网IP可能不在允许列表内。可临时将ACR网络设置改为“允许所有网络访问”,测试是否能正常拉取镜像。验证资源区域一致性
确认ACI部署区域(YAML中location: switzerlandnorth)与ACR所在区域是否一致。跨区域拉取公开镜像可能存在同步延迟或网络链路问题,尝试将ACI部署到ACR同区域测试。确认ACR镜像的存在性与标签有效性
用以下命令验证镜像和标签是否存在:# 检查镜像是否存在于ACR az acr repository show --name <ACR名称> --repository <镜像名> # 检查latest标签是否存在 az acr repository show-tags --name <ACR名称> --repository <镜像名>避免因镜像推送失败、标签拼写错误导致拉取失败。
统一凭证配置方式
命令行参数与YAML配置可能存在冲突,建议直接在YAML中添加ACR凭证配置,确保参数明确:
在properties节点下添加:imageRegistryCredentials: - server: my-server.azurecr.io username: my-registry password: my-password然后执行
az container create --resource-group <myResourceGroup> --file deploy-aci.yaml,避免配置冲突。检查ACR与ACI的订阅权限
用以下命令检查ACR健康状态及当前订阅的访问权限:az acr check-health --name <ACR名称> --subscription <订阅ID>确认订阅是否有权限访问该ACR的公开镜像。
查看容器拉取日志
部署失败后,用以下命令查看容器的详细拉取日志,获取更具体的错误信息:az container logs --resource-group <myResourceGroup> --name app-with-ssl --container-name my-container日志可能会暴露DNS解析失败、镜像损坏等深层问题。
内容的提问来源于stack exchange,提问作者Gabriel Stancu

