微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法拉取镜像存储库不存在或可能需要“docker login”:

如何解决无法拉取镜像存储库不存在或可能需要“docker login”:

我在启动 Pod 时收到此错误

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-keys 秘密

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: Secrets 服务和 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

Update2 kubectl describe pod

我有 2 个 sercrets 服务,一个用于 dockerhub 凭据,另一个用于 token-rzlx6,无论出于何种原因。 问题是当我运行 describe 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>
...

解决方法

所以问题是 docker-server 值。根据我看过的教程,我使用的是 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 注册表。文档在这里。 https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/

更新:

我没有关注 API 版本的另一件事是 docker 配置文件,它有 V1 作为 API,从这里我使用端点创建秘密服务,而它仅适用于 V2。

cat ~/.docker/config.json                                                 
{
    "auths": {
        "https://index.docker.io/v1/": {}
    },"credsStore": "osxkeychain"
}%                              

更新 2: 但是,当我使用 docker pull 命令在本地拉取图像时,使用 v1 url 成功拉取了图像。假设是,api V1 在 docker 中工作,但不在 kubernetes 中。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。