Kubernetes 无法提取映像存储库不存在或可能需要';docker登录名';:

Kubernetes 无法提取映像存储库不存在或可能需要';docker登录名';:,kubernetes,minikube,docker-registry,kubernetes-secrets,Kubernetes,Minikube,Docker Registry,Kubernetes Secrets,我在启动吊舱时收到此错误 Failed to pull image "docker-username/docker-private-repository:latest": rpc error: code = Unknown desc = Error response from daemon: pull access denied for docker-username/docker-private-repository, repository does not exist o

我在启动吊舱时收到此错误

Failed to pull image "docker-username/docker-private-repository:latest": rpc error: code = Unknown desc = Error response from daemon: pull access denied for docker-username/docker-private-repository, repository does not exist or may require 'docker login': denied: requested access to the resource is denied
我的设置如下:

使用命令行锁定了一个特工

kubectl create secret docker-registry docker-keys --docker-username=docker-username --docker-password=password --docker-email=docker-email@gmail.com --docker-server=https://index.docker.io/v1
这将生成以下内部机密数据

kubectl get secret docker-keys -o json | jq '.data | map_values(@base64d)'
{
  ".dockerconfigjson": "{\"auths\":{\"https://index.docker.io/v1\":{\"username\":\"docker-username\",\"password\":\"password\",\"email\":\"docker-email@gmail.com\",\"auth\":\"base64encodedtoken\"}}}"
}

然后在部署中,我使用
docker键
secrets

apiVersion: apps/v1
kind: Deployment
metadata:
  name: docker-private-repository
  labels:
    app: docker-private-repository
spec:
  replicas: 1
  selector:
    matchLabels:
      app: docker-private-repository
  template:
    metadata:
      labels:
        app: docker-private-repository
    spec:
      imagePullSecrets:
        - name: docker-keys
      containers:
        - name: docker-private-repository
          image: docker-username/docker-private-repository:latest
          imagePullPolicy: Always
          ports:
            - containerPort: 3000
我确实尝试过寻找解决方案,但总是以上面的设置结束

更新1: 机密服务和pod在同一命名空间中运行
default
。 从docker hub工厂手动拉出

docker pull docker-username/docker-private-repository:latest
latest: Pulling from docker-username/docker-private-repository
0ecb575e629c: Already exists 
...
7467d1831b69: Already exists 
Digest: sha256:153643ecb19c2ce54635839ce9393b2e256ce6c34a2fe75b91c7a41525a6a535
Status: Downloaded newer image for docker-username/docker-private-repository:latest
docker.io/docker-username/docker-private-repository:latest

更新2
kubectl描述pod

我有两个sercrets服务,一个用于dockerhub凭据,另一个是
token-rzlx6
,无论出于何种原因。 问题是,当我运行descripe pod时,我没有看到dockerhub作为
token-rzlx6
装载的秘密,这可能是原因吗?为什么没有安装

...
Volumes:
  default-token-rzlx6:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-rzlx6
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
...
。。。
卷数:
default-token-rzlx6:
类型:Secret(由Secret填充的卷)
SecretName:default-token-rzlx6
可选:false
QoS等级:最佳努力
节点选择器:
...

所以问题是docker服务器的值。根据我看过的教程,我使用的是api V1,而我的图像是用V2推送/创建到dockerhub的,可能与此无关,V1已被弃用。当我创建一个特勤局时,我需要使用V2服务器
https://index.docker.io/v2/
,例如:

kubectl create secret docker-registry docker-keys \
  --docker-username=yyyyyy \
  --docker-password=xxxxx \
  --docker-email=my@mail.com \
  --docker-server=https://index.docker.io/v2/
一件简单的事情,花了好几天的时间才发现,因为很多文章都有V1,或者根本没有显示,或者使用私有docker注册表。医生来了

更新:

我没有注意API版本的另一个原因是docker配置文件,它以V1作为API,从这里我使用端点创建了秘密服务,而它只使用V2

cat ~/.docker/config.json                                                 
{
    "auths": {
        "https://index.docker.io/v1/": {}
    },
    "credsStore": "osxkeychain"
}%                              
更新2:
然而,当我使用
dockerpull
命令在本地拉取图像时,使用v1url成功地拉取了图像。假设api V1在docker中工作,但在kubernetes中不工作。

所以问题在于docker服务器的值。根据我看过的教程,我使用的是api V1,而我的图像是用V2推送/创建到dockerhub的,可能与此无关,V1已被弃用。当我创建一个特勤局时,我需要使用V2服务器
https://index.docker.io/v2/
,例如:

kubectl create secret docker-registry docker-keys \
  --docker-username=yyyyyy \
  --docker-password=xxxxx \
  --docker-email=my@mail.com \
  --docker-server=https://index.docker.io/v2/
一件简单的事情,花了好几天的时间才发现,因为很多文章都有V1,或者根本没有显示,或者使用私有docker注册表。医生来了

更新:

我没有注意API版本的另一个原因是docker配置文件,它以V1作为API,从这里我使用端点创建了秘密服务,而它只使用V2

cat ~/.docker/config.json                                                 
{
    "auths": {
        "https://index.docker.io/v1/": {}
    },
    "credsStore": "osxkeychain"
}%                              
更新2:
然而,当我使用
dockerpull
命令在本地拉取图像时,使用v1url成功地拉取了图像。假设api V1在docker中工作,但在kubernetes中不工作。

如果您在本地系统上手动运行
docker登录用户通行证
,您可以拉取您的映像吗?@AliTou docker登录成功,我将映像推送到dockerhub,所以我假设拉取也可以工作。反正我试过了<代码>状态:为docker用户下载了更新的映像/docker private repo:latest如果您在本地系统上手动运行
docker login user pass
,您可以拉取您的映像吗?@AliTou docker登录成功,我将映像推送到dockerhub,因此我假设拉取也可以工作。反正我试过了<代码>状态:为docker用户下载的较新图像/docker private repo:最新