根據你提供的日誌訊息,問題的核心非常明確:Azure App Service 無法從你的 Azure Container Registry (ACR) 抓取 Image。
關鍵錯誤代碼是 ImagePullUnauthorizedFailure。這代表 App Service 的身份識別(Identity)沒有足夠的權限去讀取 policyrecommendacr1.azurecr.io 裡的內容。
請依照以下步驟修復權限問題:
1. 檢查 ACR 的「管理使用者」 (最快速的解法)
如果你是手動部署且想快速測試,可以使用 ACR 的 Admin 帳號:
- 前往 Azure Container Registry (policyrecommendacr1)。
- 在左側選單點選 Settings > Access keys。
- 確定 Admin user 已勾選為 Enabled。
- 回到 App Service > Deployment Center。
- 在 Settings 標籤下,確認來源是 Azure Container Registry,並確保它正確自動填入了認證資訊。
2. 使用「受控識別」 (Managed Identity, 推薦作法)
這是企業級最安全的做法,不需管理密碼。
- 啟用 App Service 身分識別:
- 在 App Service 左側選單找到 Identity。
- 將 System assigned 狀態改為 On,然後儲存。
- 在 ACR 賦予權限:
- 前往你的 ACR (policyrecommendacr1)。
- 點選 Access Control (IAM) > Add role assignment。
- 角色選擇:AcrPull。
- 指派對象:選擇 Managed Identity,並選取你的 App Service。
- 更新 App Service 設定:
- 回到 App Service > Deployment Center。
- 確定 Authentication 方式改為 Managed Identity。
3. 檢查網路限制 (Firewall)
如果權限設定正確但依然失敗,請檢查 ACR 的網路設定:
- 前往 ACR > Networking。
- 如果選取了 Selected networks 或 Private access,請確保你的 App Service 位於允許存取的範圍內。
- 若為測試用途,可先暫時改為 All networks 交叉比對。
總結檢查清單
- [ ] ACR 的 AcrPull 權限是否已給予 App Service?
- [ ] Deployment Center 裡的映像檔名稱與標籤 (
v1) 是否輸入正確? - [ ] 如果使用 Admin User,密碼是否已在 App Service 的 Configuration (如
DOCKER_REGISTRY_SERVER_PASSWORD) 中正確更新?
修改完權限後,記得在 App Service 的 Overview 頁面點擊 “Restart”,強制它重新嘗試 Pull Image。