私有 Docker 存储库上的“拉取图像失败:拉取访问被拒绝”

我正在尝试通过 Kubernetes 运行我的节点应用程序(它在我的带有 Docker Desktop 的 PC 上成功运行)。这是一个树莓派多节点 ubuntu kubeadm 服务器(一切都是最新的稳定版本)。我确实在此服务器上运行了成功的 pod。我跟着 Kubernetes official guide 登录到我在 Docker hub 上的私有 docker 存储库。我已经仔细检查了我的凭据,我可以在没有 sudo 权限的情况下使用 docker。

下面列出了我的确切设置,如果您希望我添加更多信息,请发表评论!

我的错误代码:

无法拉取映像“matthewvine/node-tools:rewrite”:rpc 错误:代码 = 未知 desc = 来自守护进程的错误响应:matthewvine/node-tools 的拉取访问被拒绝,存储库不存在或可能需要“docker login”: denied:请求的资源访问被拒绝

我的 regcred 码头工人秘密:

data:
  .dockerconfigjson: ey...==
kind: Secret
metadata:
  creationTimestamp: "2022-01-10T23:34:40Z"
  name: regcred
  namespace: default
  resourceVersion: "1807979"
  uid: 69...
type: kubernetes.io/dockerconfigjson

我的 node-ht 部署:

apiVersion: apps/v1
metadata:
  name: node-ht
  namespace: node
  ...
spec:
  replicas: 1
  selector:
    matchLabels:
      app: node-ht
  template:
    metadata:
      ...
    spec:
      containers:
        - name: node-ht
          image: matthewvine/node-tools:rewrite
          ports:
            - containerPort: 3000
              protocol: TCP
          resources: {}
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
          imagePullPolicy: Always
      restartPolicy: Always
      terminationGracePeriodSeconds: 30
      dnsPolicy: ClusterFirst
      securityContext: {}
      imagePullSecrets:
        - name: regcred
      schedulerName: default-scheduler
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 25%
      maxSurge: 25%
  revisionHistoryLimit: 10
  progressDeadlineSeconds: 600

我的解决方案:原来这是一个简单的命名空间问题。秘密需要与试图使用它们的资源位于相同的命名空间中。

stack overflow "Failed to pull image: pull access denied" on a private docker repository
原文答案
author avatar

接受的答案

密钥必须与分发命名空间位于同一位置。

如果你想将你的 docker secret 连接到 kubernetes,你可以使用下面的方法。

根据现有 Docker 凭据创建 Secret ( link )

kubectl create secret generic regcred 
    --from-file=.dockerconfigjson=<path/to/.docker/config.json> 
    --type=kubernetes.io/dockerconfigjson

我想你已经这样做了。命名空间更改应该可以解决您的问题


答案: