1

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

FROM alpine:latest
ENTRYPOINT ["echo"]

我正在使用 fabric8iokubernetes-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。使用minikube 0.18.0-1kubectl-bin 1.6.1-1来自 AUR、docker 1:17.04.0-1来自社区存储库和位于(撰写本文时)的 dockerregistry容器。fabric8io是版本。latest2.6.1kubernetes-client2.2.13

我检查过:

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

我没有:

  • 在本地运行 kubernetes(而不是 minikube),因为 kubernetes 的 AUR 包在我的机器上构建需要非常长的时间
  • 通读kubernetes源代码,因为我不懂golang

检查minikube dashboard时,Deployments、Replica Sets 和 Pods 的部分都有相同的错误:

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,同上

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

4

2 回答 2

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,参考

在尝试此操作之前删除您当前的 Docker 安装

于 2017-04-18T14:56:24.157 回答
0

在删除任何东西之前,您可以尝试minikube delete(如果那里没有重要的东西,或者备份的东西), minikube start以便您将以前的集群全部删除,然后尝试再次拉动您的图像。它为我做到了。

于 2018-06-16T11:23:02.143 回答