【问题标题】:Trying to pull/run docker images from docker hub on Minikube fails尝试从 Minikube 上的 docker hub 拉取/运行 docker 镜像失败
【发布时间】:2019-12-08 10:31:18
【问题描述】:

我对 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

当我在 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

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

【问题讨论】:

  • 您是否尝试使用docker pull nginx 手动拉取图像?我认为问题在于您无法从环境中的 docker hub 中提取图像。更改另一个您可以从中提取图像的注册表。
  • 有错误消息表明在 minikube VM 中运行的 Docker 守护程序无法解析 registry-1.docker.io 主机名,因为它配置为用于 DNS 解析的 DNS 名称服务器 (192.168.64.1:53) 拒绝连接。如果你执行minikube ssh 然后运行nslookup hub.docker.com 你会得到什么?
  • 我用 nslookup 信息更新了我的问题
  • 令我感到奇怪的是,Docker 守护进程试图通过 192.168.64.1 的名称服务器解析 registry-1.docker.io,但是当您在 VM 上使用 nslookup 时,它使用的是 10.12.192.22 的名称服务器。我在网上搜索了“minkube Get registry-1.docker.io/v2: dial tcp:lookup registry-1.docker.io on 192.168.64.1:53”,发现有人发了this comment的问题,似乎和你的问题一样,而且似乎特定于xhyve
  • @AmitKumarGupta 你的预感是正确的。这是一个 100% 的 XHyve 问题。重新安装 minikube 并将其配置为使用 Virtual box,一切看起来都很好。如果需要,您可以将评论转换为答案。

标签: docker kubernetes minikube


【解决方案1】:

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

该人在该评论中说:

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

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

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

【讨论】:

    【解决方案2】:

    在我的情况下,这是由于在我的 Mac 上使用 Homebrew 运行 DNS 服务器 dnsmasq 引起的,这导致了 minikube 中的 DNS 请求失败。停止dnsmasq 后,一切正常。

    【讨论】:

    • 你拯救了我的一天!我在 Fedora 33 上使用 docker 作为驱动程序。也许防火墙也应该被禁用
    • 还需要重启mac。
    【解决方案3】:

    我的本​​地 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 确实是这种情况的原因。

    【讨论】:

      猜你喜欢
      • 2018-07-13
      • 2017-04-24
      • 2023-04-03
      • 1970-01-01
      • 2021-07-28
      • 1970-01-01
      • 2018-06-27
      • 2023-02-20
      • 2020-01-06
      相关资源
      最近更新 更多