尝试在Kubernetes中使用本地Docker Registry时获取ErrImagePull

时间:2019-05-11 20:13:54

标签: docker kubernetes

首先,我创建一个本地Docker注册表...

docker run -d -p 5000:5000 --restart=always --name registry registry:2

然后我按下

docker push localhost:5000/jrg/hello-k8s

我确认到

$ docker pull localhost:5000/jrg/hello-k8s
Using default tag: latest
latest: Pulling from jrg/hello-k8s
Digest: sha256:c475cb7167208e8f018e54ad81d4b7bbbb9c14875bc1624bcce730edf9afede0
Status: Image is up to date for localhost:5000/jrg/hello-k8s:latest

然后我启动Minikube

minikube start --insecure-registry=localhost:5000

但是当我跑步

kubectl create deployment hello-k8s --image=localhost:5000/jrg/hello-k8s

我明白了

NAME                          READY   STATUS         RESTARTS   AGE
hello-k8s-75846c4bfc-b7zp7    0/1     ErrImagePull   0          4s

我想念什么?

更新

我也尝试过(假设5.5.​​5.5是我的无线适配器的IP地址(通过在浏览器中访问进行确认)。

然后我启动Minikube

minikube start --insecure-registry=5.5.5.5:5000

但是当我跑步

kubectl create deployment hello-k8s --image=5.5.5.5:5000/jrg/hello-k8s

但是我仍然遇到同样的问题,过了一会儿它似乎变成了ImagePullBackOff

FYI项目(https://github.com/jrgleason/hello-kubernetes/tree/ADD_CASSANDRA

2 个答案:

答案 0 :(得分:1)

我认为问题是localhost将引用kubernetes主机本身,而不是您的注册表。

您需要这样做,以便可以从minikube内部访问注册表。尝试使用计算机的IP地址代替localhost

有一个用于minikube的代理插件,可让您从minikube中访问localhost。我建议将其设置为最简单的解决方案https://github.com/Faithlife/minikube-registry-proxy

如果这不起作用,这里有一个指南来设置带有本地注册表https://blog.hasura.io/sharing-a-local-registry-for-minikube-37c7240d0615/的minikube

答案 1 :(得分:0)

如果您使用minikube,则必须在minikube计算机上启动docker注册表。 您可以使用minikube注册表插件,也可以自己使用docker。确保使用minikube主机中的docker守护程序:

eval $(minikube docker-env) 

然后必须将映像推送到正确的注册表,然后通过使用远程泊坞窗守护程序来构建并推送到“本地主机”(在这种情况下为迷你库VM)