簡體   English   中英

k8s - 無法拉取圖像...來自守護程序的錯誤響應:{private_repo} 的拉取訪問被拒絕,存儲庫不存在

[英]k8s - Failed to pull image…Error response from daemon: pull access denied for {private_repo}, repository does not exist

收到此消息:

Failed to pull image....Error response from daemon: pull access denied for {private_repo}, the repository does not exist or may require 'docker login'

使用 AWS ECR BUT 部署新的掌舵圖后

  1. 完整的私有 repo 路徑是正確的,並且圖像存在於 ECR 中,在 ReplicationController 中:private_repo/serviceXYZ:latest-develop
  2. 其他使用相同存儲庫但不同路徑的 pod 正在工作,例如:private_repo/serviceABC(他們最新的本地映像已有幾個月的歷史,我們最近確實部署了它們,這告訴我我們沒有在本地提取它們,而是直接從 ECR 提取)
  3. ~/.docker/config.json顯示已登錄
  4. 成功拉取的其他服務(沒有imagePullSecrets )沒有秘密

任何想法表示贊賞。

您沒有指定您的 Kubernetes 資源(即 Pod、部署等)。 但據我所知,這很可能是因為:

  • 您在特定 Pod 定義中缺少ImagePullSecrets
     kubectl create secret generic regcred \ --from-file=.dockerconfigjson=~/.docker/config.json> \ --type=kubernetes.io/dockerconfigjson
    然后是吊艙:
     apiVersion: v1 kind: Pod metadata: name: myservice spec: containers: - name: yourXYZservice image: serviceXYZ:latest-develop imagePullSecrets: - name: regcred
  • 您的私人 ECR 存儲庫沒有latest-develop標簽。 在推送之前,標記您的圖像並使用標記將其推送:
     docker tag <image-id> serviceXYZ:latest-develop docker push serviceXYZ:latest-develop

您需要對 ECR 進行身份驗證才能提取圖像。 如果您還沒有這樣做,請按照此處的說明進行操作。 基本上,您從 AWS 獲得授權令牌以將其傳遞給docker login ECR 所需的賬戶是基於 IAM 的,與您本地的 Docker 賬戶不同。

如果您已經這樣做了,則令牌可能已過期。 然后重新登錄。

您不必為其他 pod 執行此操作的原因可能是這些圖像已構建或拉到本地,因此 Docker 不必下載它(將 pod 的imagePullPolicy設置為IfNotPresent作為默認值)。

問題出在 ECR 中針對此特定 repo 的權限,我將以下權限設置為“Effect”:“Allow”並且它起作用了:

"Action": [
    "ecr:BatchCheckLayerAvailability",
    "ecr:BatchGetImage",
    "ecr:CompleteLayerUpload",
    "ecr:DescribeImages",
    "ecr:GetDownloadUrlForLayer",
    "ecr:InitiateLayerUpload",
    "ecr:ListImages",
    "ecr:PutImage",
    "ecr:UploadLayerPart"
  ]

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM