首页 > 解决方案 > 尝试从 Minikube 上的 docker hub 拉取/运行 docker 镜像失败

问题描述

我对 Kuberetes 还很陌生,之前我在 docker 上做过一些工作。我正在尝试完成以下工作:

  1. 启动 Minikube
  2. 使用 Kube-ctl 从 docker hub 启动一个 docker 镜像。

我启动了 minikube,看起来它们已经启动并运行了。然后我通过以下命令

kubectl run nginx --image=nginx (请注意,我的机器上没有此图像,我希望 k8 为我获取它)

现在,当我这样做时,它会启动 pod,但状态为ImagePullBackOff. 所以我kubectl describe pod对它运行了命令,结果如下所示:

Events:
  Type     Reason     Age              From               Message
  ----     ------     ----             ----               -------
  Normal   Scheduled  8m               default-scheduler  Successfully assigned default/ngix-67c6755c86-qm5mv to minikube
  Warning  Failed     8m               kubelet, minikube  Failed to pull image "nginx": rpc error: code = Unknown desc = Error response from daemon: Get https://registry-1.docker.io/v2/: dial tcp: lookup registry-1.docker.io on 192.168.64.1:53: read udp 192.168.64.2:52133->192.168.64.1:53: read: connection refused
  Normal   Pulling    8m (x2 over 8m)  kubelet, minikube  Pulling image "nginx"
  Warning  Failed     8m (x2 over 8m)  kubelet, minikube  Error: ErrImagePull
  Warning  Failed     8m               kubelet, minikube  Failed to pull image "nginx": rpc error: code = Unknown desc = Error response from daemon: Get https://registry-1.docker.io/v2/: dial tcp: lookup registry-1.docker.io on 192.168.64.1:53: read udp 192.168.64.2:40073->192.168.64.1:53: read: connection refused
  Normal   BackOff    8m (x3 over 8m)  kubelet, minikube  Back-off pulling image "nginx"
  Warning  Failed     8m (x3 over 8m)  kubelet, minikube  Error: ImagePullBackOff

然后我四处搜索,看看是否有人遇到过类似的问题,结果发现有些人遇到了,他们确实通过使用更多标志重新启动 minikube 解决了这个问题,如下所示:

minikube start --vm-driver="xhyve" --insecure-registry="$REG_IP":80

当我nslookup在 Minikube 中进行操作时,它会通过以下信息解决:

Server:         10.12.192.22
Address:        10.12.192.22#53

Non-authoritative answer:
hub.docker.com  canonical name = elb-default.us-east-1.aws.dckr.io.
elb-default.us-east-1.aws.dckr.io       canonical name = us-east-1-elbdefau-1nlhaqqbnj2z8-140214243.us-east-1.elb.amazonaws.com.
Name:   us-east-1-elbdefau-1nlhaqqbnj2z8-140214243.us-east-1.elb.amazonaws.com
Address: 52.205.36.130
Name:   us-east-1-elbdefau-1nlhaqqbnj2z8-140214243.us-east-1.elb.amazonaws.com
Address: 3.217.62.246
Name:   us-east-1-elbdefau-1nlhaqqbnj2z8-140214243.us-east-1.elb.amazonaws.com
Address: 35.169.212.184

仍然没有运气。我在这里做错了什么吗?

标签: dockerkubernetesminikube

解决方案


有错误消息表明在 minikube VM 中运行的 Docker 守护程序无法解析registry-1.docker.io主机名,因为它配置为用于 DNS 解析 ( 192.168.64.1:53) 的 DNS 名称服务器拒绝连接。令我感到奇怪的是,Docker 守护进程正试图registry-1.docker.io通过名称服务器解析,192.168.64.1但是当您nslookup在 VM 上使用名称服务器时,它使用的是10.12.192.22. 我在 Internet 上搜索“minkube Get registry-1.docker.io/v2: dial tcp:lookup registry-1.docker.io on 192.168.64.1:53”,发现有人发表此评论的问题,似乎与您的问题,并且似乎特定于xhyve.

在该评论中,该人说:

这个问题看起来确实像 virtualbox 中没有的 xhyve 问题。

切换到virtualbox为我解决了这个问题。

我停止了 minikube,删除了它,没有启动它--vm-driver=xhyve(minikube 默认使用 virtualbox 驱动程序),然后docker build -t hello-node:v1 .工作正常,没有错误


推荐阅读