瞭解實用的疑難排解步驟,解決您在 Artifact Registry 中管理容器映像檔時遇到的問題。
Docker CLI 中的專案 ID 語法
由於 Docker 處理冒號的方式有所不同,因此使用 Docker CLI 時,您必須將專案 ID 中的冒號 (:) 換成斜線 (/)。
詳情請參閱「網域範圍專案」。
無法提取映像檔或部署至 Google Cloud 執行階段環境
請確認下列事項:
- 確認要推送的圖片完整路徑是否正確。路徑必須包含登錄主機名稱、 Google Cloud、專案 ID、存放區和映像檔。例如:
詳情請參閱「存放區和映像檔名稱」。us-west1-docker.pkg.dev/my-project/my-repo/my-image:v1 - 確認提取映像檔的帳戶具備從存放區讀取資料的權限。如果您已停用服務帳戶的自動角色授予功能,則必須將 Artifact Registry 角色授予執行階段服務帳戶。
- 如果是 Compute Engine、Cloud Run 和 Google Kubernetes Engine 服務帳戶,您必須將 Artifact Registry 讀取者角色 (
roles/artifactregistry.reader) 授予執行階段服務帳戶。 - 您必須將 Artifact Registry 寫入者角色 (
roles/artifactregistry.writer) 授予執行建構作業的服務帳戶,才能為 Cloud Build 服務帳戶執行建構作業。 - 如果您使用 Docker 或其他第三方工具,請務必:
- 授予權限給與存放區互動的帳戶。
- 設定用戶端,以便向存放區進行驗證。
無法將映像檔推送至 Artifact Registry
請嘗試按照下列步驟操作:
- 確認存放區是否存在。與 Container Registry 不同,建立存放區與推送第一個映像檔是不同的作業。如果存放區不存在,請建立存放區。
- 確認要推送的圖片完整路徑是否正確。路徑必須包含登錄主機名稱、 Google Cloud 專案 ID、存放區和映像檔。例如:
us-west1-docker.pkg.dev/my-project/my-repo/my-image:v1每個 Artifact Registry 存放區都是獨立的資源,因此您無法將映像檔推送至沒有存放區的路徑。例如,
us-west1-docker.pkg.dev/my-project/my-image:v1是無效的圖片路徑。詳情請參閱「存放區和映像檔名稱」。
- 確認推送映像檔的帳戶具備存放區的寫入權限。如果您已停用服務帳戶的自動角色授予功能,則必須將 Artifact Registry 角色授予執行階段服務帳戶。
- 如果是 Compute Engine、Cloud Run 和 Google Kubernetes Engine 服務帳戶,您必須將 Artifact Registry 寫入者角色 (
roles/artifactregistry.writer) 授予執行階段服務帳戶。 - 您必須將 Artifact Registry 寫入者角色 (
roles/artifactregistry.writer) 授予執行建構作業的服務帳戶,才能使用 Cloud Build 服務帳戶。 - 如果 Artifact Registry 傳回
The repository has enabled tag immutability訊息,表示存放區已設定標記不可變更。您無法推送已用於存放區中同一個映像檔其他版本的映像檔。請嘗試再次推送映像檔,並使用其他儲存版本未使用的標記。如要確認存放區是否已設定為不可變更的映像檔標記,請查看 Google Cloud 控制台存放區清單中的「不可變更的映像檔標記」欄,或執行下列指令:
gcloud artifacts repositories describe REPOSITORY \ --project=PROJECT-ID \ --location=LOCATION
ImagePullBackOff 和 ErrImagePull 訊息
如果訊息中包含 ImagePullBackOff 和 ErrImagePull,表示 GKE 無法從登錄檔提取映像檔。