排解容器映像檔問題

瞭解實用的疑難排解步驟,解決您在 Artifact Registry 中管理容器映像檔時遇到的問題。

無法擷取圖片或部署至 Google Cloud 執行階段環境

請確認下列事項:

  1. 確認要推送的圖片完整路徑是否正確。路徑必須包含註冊主機名稱、 Google Cloud、專案 ID、存放區和映像檔。例如:
    us-west1-docker.pkg.dev/my-project/my-repo/my-image:v1
    詳情請參閱「存放區和映像檔名稱」。
  2. 請確認提取圖像的帳戶是否具備正確的權限,可從存放區讀取資料。如果您已停用服務帳戶的自動角色授予功能,則必須將 Artifact Registry 角色授予執行階段服務帳戶。
    • 針對 Compute Engine、Cloud Run 和 Google Kubernetes Engine 服務帳戶,您必須將 Artifact Registry Reader 角色 (roles/artifactregistry.reader) 授予執行階段服務帳戶。
    • 針對 Cloud Build 服務帳戶,您必須將 Artifact Registry Writer 角色 (roles/artifactregistry.writer) 授予執行建構作業的服務帳戶。
    • 如果您使用的是 Docker 或其他第三方工具,則必須:

無法將映像檔推送至 Artifact Registry

建議您嘗試下列做法:

  1. 確認存放區是否存在。與 Container Registry 不同,建立存放區與推送第一個映像檔是兩個不同的作業。如果存放區不存在,請建立存放區。
  2. 確認要推送的圖片完整路徑是否正確。路徑必須包含登錄主機名稱、 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 是無效的圖片路徑。

    詳情請參閱「存放區和映像檔名稱」。

  3. 請確認推送映像檔的帳戶是否具備寫入存放區的權限。如果您已停用自動授予服務帳戶角色,則必須將 Artifact Registry 角色授予執行階段服務帳戶。
    • 針對 Compute Engine、Cloud Run 和 Google Kubernetes Engine 服務帳戶,您必須將 Artifact Registry Writer 角色 (roles/artifactregistry.writer) 授予執行階段服務帳戶。
    • 您必須將 Artifact Registry 寫入者角色 (roles/artifactregistry.writer) 授予執行建構作業的服務帳戶,才能為 Cloud Build 服務帳戶授予權限。
  4. 如果 Artifact Registry 傳回訊息 The repository has enabled tag immutability,則表示已為存放區設定了標記不變性。您無法推送標記已用於存放區中同一個圖片的其他版本的圖片。請嘗試使用其他已儲存圖片版本未使用的標記,再次推送圖片。

    如要確認已為存放區設定不可變更的映像檔標記,請在 Google Cloud 主控台的存放區清單中查看「不可變更的映像檔標記」欄,或執行下列指令:

    gcloud artifacts repositories describe REPOSITORY \
          --project=PROJECT-ID \
          --location=LOCATION
      

ImagePullBackOff 和 ErrImagePull 訊息

訊息中出現 ImagePullBackOffErrImagePull 表示 GKE 無法從註冊資料庫中提取映像檔。