为什么在这个Kubernetes部署中出现ErrImagePull错误?

我正在尝试使用Minikube,Docker Registry和演示节点项目来创build本地Kubernetes部署。

我做的第一件事是安装Docker v 1.12.3,然后是Minikube v0.12.2。

然后通过运行这个命令创build了一个Docker Registry容器(通过本教程 ,只运行下面的第一个命令)

docker run -d -p 5000:5000 --name registry registry:2 

接下来我运行这个minikube命令来创build一个本地kubernetes集群:

 minikube start --vm-driver="virtualbox" --insecure-registry="0.0.0.0:5000" 

我的项目结构如下所示:

 . ├── Dockerfile └── server.js 

和我的Dockerfile看起来像这样:

 FROM node:7.1.0 EXPOSE 8080 COPY server.js . CMD node server.js 

然后我build立了自己的docker镜像并将其推送到我的私有存储库:

 docker build -t hello-node . docker tag hello-node localhost:5000/hello-node docker push localhost:5000/hello-node 

然后我试着用这个命令运行一个部署:

 kubectl run hello-node --image=localhost:5000/hello-node --port=8888 

但是,我得到这个:

 sudo kubectl get pods --all-namespaces NAMESPACE NAME READY STATUS RESTARTS AGE default hello-node-3745105022-gzs5a 0/1 ErrImagePull 0 11m kube-system kube-addon-manager-minikube 1/1 Running 4 10d kube-system kube-dns-v20-2x64k 3/3 Running 12 10d kube-system kubernetes-dashboard-mjpjv 1/1 Running 4 10d 

我想我可能会缺less某种dockerregistry身份validation,但是因为我使用谷歌search,我找不到我理解的东西。 有人能指点我的方向吗?

编辑

使用ssh访问kubernetes虚拟机上的bash ,并使用以下命令从我的私有registry中获取hello-node映像:

 minikube ssh Boot2Docker version 1.11.1, build master : 901340f - Fri Jul 1 22:52:19 UTC 2016 Docker version 1.11.1, build 5604cbe docker@minikube:~$ sudo docker pull localhost:5000/hello-node Using default tag: latest Pulling repository localhost:5000/hello-node Error while pulling image: Get http://localhost:5000/v1/repositories/hello-node/images: dial tcp 127.0.0.1:5000: getsockopt: connection refused 

localhost:5000在kubernetes主机VM中使用的正确地址?

它看起来像你在主机上运行registry。 实际上,你需要在VM内运行registry。 你可以通过在你的shell中运行这个命令第一个eval $(minikube docker-env)来将你的docker客户端指向minikube VM里面的docker守护进程。

然后,您可以在您的主机上运行docker build命令,但它将在VM内部构build。

事实上,如果你的目标是简单地运行本地版本的图像,你应该运行eval $(minikube docker-env)指向VM中的imagePullPolicy: IfNotPresent守护进程,并在你的pod YAML中设置imagePullPolicy: IfNotPresent 。 然后,如果可用,kubernetes将使用本地构build的图像。