"无法检查图片XXX:图片的ID或尺寸未设置"?

时间:2017-04-17 03:28:14

标签: kubernetes fabric8 minikube

我试图将Docker容器部署到本地运行的minikube实例,并在尝试拉(?)图像时出现此错误。该映像存在于自托管的Docker注册表中。我测试的图像是使用以下Dockerfile构建的:

FROM alpine:latest
ENTRYPOINT ["echo"]

我正在使用fabric8io kubernetes-client库创建一个类似的部署:

// 'kube' is an instance of io.fabric8.kubernetes.client.KubernetesClient
final Deployment deployment = kube.extensions().deployments()
        .createOrReplaceWithNew()
        .withNewMetadata()
            .withName(name)
            .withNamespace("staging")
        .endMetadata()
        .withNewSpec()
            .withReplicas(1)
            .withNewTemplate()
                .withNewMetadata()
                    .addToLabels("app", name)
                .endMetadata()
                .withNewSpec()
                    .addNewImagePullSecret()
                        // "regsecret" is the kubectl-created docker secret
                        .withName("regsecret")
                    .endImagePullSecret()
                    .addNewContainer()
                        .withName(name)
                        .withImage(imageName + ":latest")
                    .endContainer()
                .endSpec()
            .endTemplate()
        .endSpec()
        .done();

这一切都在Arch Linux上运行,内核Linux 4.10.9-1-ARCH x86_64 GNU/Linux。使用来自AUR的minikube 0.18.0-1kubectl-bin 1.6.1-1,来自社区存储库的docker 1:17.04.0-1,以及registrylatest上的docker 2.6.1容器这个)。 fabric8io kubernetes-client的版本为2.2.13

我查了一下:

  • 自托管注册表正在通过HTTPS正确运行
  • 甚至可以拉动图像。
  • 主机和minikube VM内的docker pulldocker run完全按预期工作
  • 图像运行。见上文
  • minikube中没有任何名称冲突/等等。我在尝试之间删除了部署,副本集和pod,并且我重新创建了命名空间,只是为了安全起见。但是,我发现它并没有产生任何影响,因为我的代码会根据需要清理现有的pod /副本集/部署
  • 据我所知,DNS不是问题

我没有:

  • 在本地运行kubernetes(而不是minikube),因为kubernetes的AUR包在我的机器上构建时间长得令人难以置信
  • 阅读kubernetes源代码,因为我不知道golang

检查minikube dashboard时,部署,副本集和窗格的部分都有相同的错误:

Failed to inspect image "registry_domain/XXX/YYY:latest": Id or size of image "registry_domain/XXX/YYY:latest" is not set
Error syncing pod, skipping: failed to "StartContainer" for "YYY" with ImageInspectError: "Failed to inspect image \"registry_domain/XXX/YYY:latest\": Id or size of image \"registry_domain/XXX/YYY:latest\" is not set"

并且pod日志永久停留在

container "YYY" in pod "YYY" is waiting to start: ImageInspectError

查看提供的错误消息会引导我https://github.com/kubernetes/minikube/issues/947,但这不是同一个问题,因为kube-dns正在按预期工作。这是唯一相关的搜索结果,因为出现的其他结果是

  • Slack聊天室档案甚至不包含相关的错误消息
  • kubernetes来源,对我没有帮助
  • kubernetes / minikube#947,如上所述

老实说,我不确定从哪里开始。任何意见,将不胜感激。

2 个答案:

答案 0 :(得分:1)

Kubernetes 1.6可能与最新的Docker版本(17.xx.xx)不兼容,您是否可以降低Docker版本并重试此版本。

如果您不确定如何找到该版本,Kubernetes(v1.6)中推荐的Docker版本为1.12。在ubuntu或debain中使用它:

apt-get update && apt-get install -y apt-transport-https
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb http://apt.kubernetes.io/ kubernetes-xenial main
EOF
apt-get update
apt-get install -y docker.io

对于centos,ref

在尝试此

之前删除当前的Docker安装

答案 1 :(得分:0)

在删除任何内容之前,您可以尝试minikube delete(如果没有重要内容或备份内容)和minikube start,以便您完全删除之前的群集,并尝试重新提取您的图像。它是为我做的。