尝试从 Minikube 上的 docker hub pull/run docker 图像失败

Trying to pull/run docker images from docker hub on Minikube fails

我是 Kuberetes 的新手,我之前用 docker 做过一些工作。我正在努力完成以下工作:

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

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

kubectl 运行 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

当我在 Minikube 中执行 nslookup 时,它确实解析了以下信息:

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

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

错误消息表明 minikube VM 中的 Docker 守护程序 运行 无法解析 registry-1.docker.io 主机名,因为它配置的 DNS 名称服务器用于 DNS 解析(192.168.64.1:53) 拒绝连接。 Docker 守护进程试图通过位于 192.168.64.1 的名称服务器解析 registry-1.docker.io 但当您 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",发现有人提出 this comment 的问题,似乎与您的问题相同,而且似乎特定于 xhyve

在那条评论中,此人说:

This issue does look like an xhyve issue not seen with virtualbox.

Switching to virtualbox fixed this issue for me.

I stopped minikube, deleted it, started it without --vm-driver=xhyve (minikube uses virtualbox driver by default), and then docker build -t hello-node:v1 . worked fine without errors

在我的例子中,它是由 运行 dnsmasq,一个 dns 服务器引起的,在我的 Mac 上使用 Homebrew,这导致 minikube 内的 DNS 请求失败。停止后 dnsmasq,一切正常。

我的本地 minikube 设置遇到了这个问题,我无法提取添加到简单部署清单中的任何图像。

$ kubectl get pods
NAME              READY   STATUS             RESTARTS   AGE
test1             0/1     ImagePullBackOff   0          68s

尝试执行以下测试:

apiVersion: v1
kind: Pod
metadata:
  name: test1
  labels:
    site: blog
spec:
  containers:
    - name: web
      image: nginx:latest

仅在重新启动 minikube 后才有可能或已修复。 在这种情况下,也许 dnsmasq 才是真正的原因。