Minikube:无法从DockerHub(公共仓库)拉取镜像。

6

我在一台安装了ArchLinux的电脑上,使用Docker作为Minikube驱动程序,运行了一个全新的Minikube安装。

使用minikube start命令启动minikube "cluster"。 docker container ls告诉我们它正在运行中:

CONTAINER ID   IMAGE                                 COMMAND                  CREATED          STATUS          PORTS                                                                                                                                  NAMES
d86070af0c21   gcr.io/k8s-minikube/kicbase:v0.0.28   "/usr/local/bin/entr…"   50 minutes ago   Up 50 minutes   127.0.0.1:49162->22/tcp, 127.0.0.1:49161->2376/tcp, 127.0.0.1:49160->5000/tcp, 127.0.0.1:49159->8443/tcp, 127.0.0.1:49158->32443/tcp   minikube

我想运行一个简单的 nginx pod,使用这个命令:kubectl run my-nginx --image nginx

由于我正在从公共存储库中拉取公共镜像,所以我不需要任何身份验证。但是 describe pod 子命令显示:

Events:
  Type     Reason     Age                From               Message
  ----     ------     ----               ----               -------
  Normal   Scheduled  47s                default-scheduler  Successfully assigned default/my-nginx to minikube
  Normal   BackOff    31s                kubelet            Back-off pulling image "nginx"
  Warning  Failed     31s                kubelet            Error: ImagePullBackOff
  Normal   Pulling    19s (x2 over 46s)  kubelet            Pulling image "nginx"
  Warning  Failed     4s (x2 over 31s)   kubelet            Failed to pull image "nginx": rpc error: code = Unknown desc = Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
  Warning  Failed     4s (x2 over 31s)   kubelet            Error: ErrImagePull

当我试图从minikube容器内部curl找到在错误信息中找到的URL时,它显示需要进行身份验证:

patres@arch:~$ minikube ssh                                                                        

docker@minikube:~$ curl https://registry-1.docker.io/v2/
{"errors":[{"code":"UNAUTHORIZED","message":"authentication required","detail":null}]}

当我尝试使用docker pull nginx命令从主机上拉取那张图片时,它会被拉取,无需身份验证。
我还尝试通过这种方式创建一个kubernetes密钥,然后使用该密钥启动YAML中的Pod,但是没有成功。
kubectl create secret docker-registry regcred --docker-server=https://registry-1.docker.io/v2/ --docker-username=myusername --docker-password=mypass --docker-email=my@email.com

最后,看起来这个问题可能不是DockerHub所特有的,因为如果我按照官方的minikubes文档并启动默认的hello-minikube部署:

kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.4

我遇到了同样的 ImagePullBackOff 错误:

$ kubectl get pod hello-minikube-6ddfcc9757-zdzz2                                           
NAME                              READY   STATUS             RESTARTS   AGE
hello-minikube-6ddfcc9757-zdzz2   0/1     ImagePullBackOff   0          6m11s

同感,真的很烦人! - Robino
2个回答

1

问题得到了解决,可能是通过以下其中一种方式完成的(不确定是哪一种):

  • 终止我的VPN连接
  • 删除minikube容器和镜像
  • 重新启动计算机
  • 使用minikube start重新开始

我猜测这可能是VPN的问题,认证到存储库可能是故障点。 - Tom Wattley

0

这可能不是正确的方式或解决方案,但这是对我有效的方法。

minikube cache add <dockerhub username>/<repo name>:<version optional>

这在本地主机上运行良好,因为我在本地机器上有Docker镜像。当然,所有配置都在我的.yml文件中,其中imagePullPolicy: IfNotPresent。因此,如果不存在该图像,则不会拉取该图像。但我们并不是真正想要实现这一点。正确的解决方案需要Kubernetes每次重新启动服务时都拉取镜像。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接