尝试从 Minikube 上的 docker hub 拉取/运行 docker 镜像失败

Los*_*ost 5 docker kubernetes minikube

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

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

我启动了 minikube,看起来一切正常。然后我通过以下命令

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

现在,当我这样做时,它会旋转吊舱,但状态为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
Run Code Online (Sandbox Code Playgroud)

然后我四处搜索,看看是否有人遇到过类似的问题,结果发现有些人遇到了并且他们确实通过使用更多如下所示的标志重新启动 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
Run Code Online (Sandbox Code Playgroud)

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

Ami*_*pta 6

该错误消息表明 minikube VM 中运行的 Docker 守护程序无法解析registry-1.docker.io主机名,因为它配置为用于 DNS 解析的 DNS 名称服务器 ( 192.168.64.1:53) 拒绝连接。让我感到奇怪的是,Docker 守护进程试图registry-1.docker.io通过名称服务器进行解析192.168.64.1,但是当您nslookup在虚拟机上时,它使用的是名称服务器10.12.192.22。我在网上搜索“minkube Getregistry-1.docker.io/v2: dial tcp:lookupregistry-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 .工作正常,没有错误


Sim*_*ted 5

就我而言,这是由于dnsmasq在我的 Mac 上使用 Homebrew 运行 dns 服务器导致的,这导致 minikube 内的 DNS 请求失败。停止后dnsmasq,一切正常。