在執行 docker push 指令, 回傳錯誤訊息:
refers to repository: error from registry: authentication required
雖然你可能已經在 Azure CLI 登入,但 Docker 需要獨立的認證才能進行 push 動作。
最簡單的解決方法是執行以下指令來讓 Azure CLI 幫 Docker 完成登入:
az acr login --name $ACR_NAME
成功後會顯示 Login Succeeded。這時再次執行 docker push 應該就能順利開始上傳。如果你的環境權限受到嚴格控管,請確認你的帳號在該 ACR 資源上擁有 AcrPush 的角色權限。
目前的登入帳號具備哪些 ACR 權限
要確認你在 Azure Container Registry (ACR) 上的權限,可以使用 Azure CLI 查詢目前的登入帳號,並檢查該帳號在該資源上被分配的角色。
請依序執行以下指令來進行診斷:
確認目前登入的帳號
首先確認你是以哪一個帳號登入 Azure CLI,因為有時候多個帳號切換會導致權限混淆。
az account show --query user.name --output tsv
查詢 ACR 的權限分配
接著,你可以查詢該 ACR 資源上所有的角色分配 (Role Assignments)。請將指令中的變數替換為你的資源名稱,或者直接執行:
az role assignment list --scope $ACR_ID --output table
在輸出的表格中,請檢查 RoleDefinitionName 這一欄。要能成功執行 docker push,你的帳號必須擁有以下其中一種角色:
- AcrPush:具備推送與拉取影像的權限。
- Contributor (參與者):具備管理資源的權限,包含推送影像。
- Owner (擁有者):具備所有權限。
如果權限不足的解決方案
如果你發現清單中沒有你的帳號,或者權限只有 AcrPull (只能下載),可以聯繫管理員,或是在具備權限的情況下執行以下指令為自己加權:
az role assignment create –assignee “你的帳號Email” –role AcrPush –scope $ACR_ID
完成權限分配後,建議重新執行一次 az acr login –name $ACR_NAME 以確保憑證更新。