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

时间:2019-07-31 00:41:38

标签: docker kubernetes minikube

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

  1. 启动Minikube
  2. 使用Kube-ctl从Docker中心启动docker映像。

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

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

然后我四处寻找是否有人遇到过类似的问题,结果发现有些人遇到了,他们确实通过使用更多如下所示的标志重新启动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

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

3 个答案:

答案 0 :(得分:2)

错误消息表明,在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的名称服务器。我在互联网上搜索了“ minkube获取注册表-1.docker.io/v2:拨打tcp:在192.168.64.1:53上查找注册表-1.docker.io”,发现一个问题,其中有人制作了this comment,似乎与您的问题相同,并且似乎特定于xhyve

此人在评论中说:

  

此问题的确看起来像是Virtualbox中未见的xhyve问题。

  

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

     

我停止了minikube,将其删除,在没有--vm-driver=xhyve的情况下启动了它(默认情况下minikube使用virtualbox驱动程序),然后docker build -t hello-node:v1 .正常运行而没有错误

答案 1 :(得分:1)

在我的情况下,这是由于在Mac上使用Homebrew运行let result = companies.compactMap {(company) -> (Company?) in let employees = company.employess.filter { $0.lastname.lowercased() == "Antony".lowercased() } return employees.isEmpty ? nil : Company(companyName: company.companyName, employess: employees) } (一台dns服务器)导致的,导致DNS请求在minikube内部失败。停止dnsmasq后,一切正常。

答案 2 :(得分:0)

我的本​​地 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 才是真正的原因。