Docker 库伯内特斯不工作;获得;“未找到图像”;

Docker 库伯内特斯不工作;获得;“未找到图像”;,docker,kubernetes,dockerhub,Docker,Kubernetes,Dockerhub,我有一个现成的Kubernetes集群运行在AWS上,安装了kube-up脚本。我想运行一些位于私有Docker Hub存储库中的容器。但我一直收到一个“未找到”错误: 我创建了一个包含.dockercfg文件的秘密。我已经通过运行以下脚本确认了它的有效性: 我已经确认我没有使用,我的看起来是这样的: > cat ~/.dockercfg {"https://index.docker.io/v1/":{"auth":"REDACTED BASE64 STRING HERE","email"

我有一个现成的Kubernetes集群运行在AWS上,安装了
kube-up
脚本。我想运行一些位于私有Docker Hub存储库中的容器。但我一直收到一个“未找到”错误:

我创建了一个包含
.dockercfg
文件的秘密。我已经通过运行以下脚本确认了它的有效性:

我已经确认我没有使用,我的看起来是这样的:

> cat ~/.dockercfg
{"https://index.docker.io/v1/":{"auth":"REDACTED BASE64 STRING HERE","email":"eng@csats.com"}}
我试过了,运气不好。(它会产生与预期相同的字符串。)

以下是我的复制控制器的YAML:

---
kind: "ReplicationController"
apiVersion: "v1"
metadata:
  name: "maestro-kubetest"
spec:
  replicas: 1
  selector:
    app: "maestro"
    ecosystem: "kubetest"
    version: "1"
  template:
    metadata:
      labels:
        app: "maestro"
        ecosystem: "kubetest"
        version: "1"
    spec:
      imagePullSecrets:
        - name: "docker-hub-csatsinternal"
      containers:
        - name: "maestro"
          image: "csats/maestro"
          imagePullPolicy: "Always"

      restartPolicy: "Always"
      dnsPolicy: "ClusterFirst"
kubectl版本:

Client Version: version.Info{Major:"1", Minor:"0", GitVersion:"v1.0.3", GitCommit:"61c6ac5f350253a4dc002aee97b7db7ff01ee4ca", GitTreeState:"clean"}
Server Version: version.Info{Major:"1", Minor:"0", GitVersion:"v1.0.3", GitCommit:"61c6ac5f350253a4dc002aee97b7db7ff01ee4ca", GitTreeState:"clean"}

有什么想法吗?

我也遇到过同样的问题。我注意到的是,在示例()中,dockercfg的格式如下:

{ 
   "https://index.docker.io/v1/": { 
     "auth": "ZmFrZXBhc3N3b3JkMTIK", 
     "email": "jdoe@example.com" 
   } 
}
而docker在我的机器中生成的

{
    "auths": {
        "https://index.docker.io/v1/": {
            "auth": "ZmFrZXBhc3N3b3JkMTIK",
            "email": "email@company.com"
        }
    }
}
通过检查源代码,我发现这个用例实际上有一个测试()

我向您确认,如果您只需要像示例中那样对“auths”进行编码,它将对您有效


可能应该更新文档。我将在github上提出一张罚单

Docker在
~/.Docker/
它看起来像:

{
    "auths": {
        "index.docker.io/v1/": {
            "auth": "ZmFrZXBhc3N3b3JkMTIK",
            "email": "email@company.com"
        }
    }
}
你真正想要的是:

{"https://index.docker.io/v1/": {"auth": "XXXXXXXXXXXXXX", "email": "email@company.com"}}
注3:

  • 1) 没有
    auths
    wrapping
  • 2) 屏幕前面有
    https://
    网址
  • 3) 这是一行
然后对其进行编码,并将其用作
.dockercfg
名称的数据

apiVersion: v1
kind: Secret
metadata: 
  name: registry
data:
  .dockercfg: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX==
type: kubernetes.io/dockercfg

请再次注意,
.dockercfg
行是一行(base64倾向于生成多行字符串)

另一个可能出现“未找到图像”的原因是如果机密的命名空间与容器的命名空间不匹配

例如,如果您的部署yaml看起来像

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: mydeployment
  namespace: kube-system
然后必须确保机密yaml使用匹配的命名空间:

apiVersion: v1
kind: Secret
metadata:
  name: mysecret
  namespace: kube-system
data:
  .dockerconfigjson: ****
type: kubernetes.io/dockerconfigjson

如果不为机密指定名称空间,则它将以默认名称空间结束,并且不会被使用。没有警告信息。我只是在这个问题上花了几个小时,所以我想在这里分享一下,希望能为其他人节省时间。

您可能会看到此错误的另一个原因是由于使用了不同于群集版本的kubectl版本(例如,使用kubectl 1.9.x对1.8.x群集)

kubectl create secret docker registry命令生成的密码格式在不同版本之间发生了更改

1.8.x群集需要以下格式的密码:

{  
   "https://registry.gitlab.com":{  
      "username":"...",
      "password":"...",
      "email":"...",
      "auth":"..."
   }
}
但是由1.9.x kubectl生成的秘密具有以下格式:

{  
   "auths":{  
      "https://registry.gitlab.com":{  
         "username":"...",
         "password":"...",
         "email":"...",
         "auth":"..."
      }
   }
}

因此,请仔细检查机密的.dockercfg数据的值,并验证它是否与kubernetes群集版本所需的格式匹配。

在您的示例中,您正在提取两个不同的图像-您是否尝试提取maestro?很好-使用正确的图像重新运行命令。同样的结果。我也遇到同样的问题。。你找到解决办法了吗?如果两个月后它对你仍然有用,是的,我找到了。没能解决我的问题。我相信我最初尝试了这两种格式。你让我找到了解决方案——结果我的问题是我的秘密是
type:Opaque
,而不是
type:kubernetes.io/dockercfg
。干杯。非常感谢,这真的解决了我的问题。我在windows上摆弄minikube,虽然Chocolate安装了kubectl cli 1.9版,但默认情况下,windows的minikube仍然是1.8版。始终运行kubectl版本并仔细检查匹配的版本。这应该是可接受的答案。MrE的答案是正确的,但没有提到格式不同的原因。非常感谢eschnou,你终于解决了让我头撞墙两天的问题。我这里也有同样的问题。唯一的区别是,我实际上希望秘密位于默认名称空间中,因为我不希望为所有名称空间创建它。当入口在名称空间内创建时,是否有方法引用默认名称空间中的机密名称空间?
{  
   "https://registry.gitlab.com":{  
      "username":"...",
      "password":"...",
      "email":"...",
      "auth":"..."
   }
}
{  
   "auths":{  
      "https://registry.gitlab.com":{  
         "username":"...",
         "password":"...",
         "email":"...",
         "auth":"..."
      }
   }
}