为什么在这个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的图像。