![](/img/trans.png)
[英]Getting error “ErrImagePull” in kubernetes deployment in simple print hello world program
[英]Why am I getting an ErrImagePull error in this Kubernetes deployment?
我正在嘗試使用 Minikube、Docker Registry 和演示節點項目創建本地 Kubernetes 部署。
我做的第一件事是安裝 Docker v1.12.3,然后是 Minikube v0.12.2。
然后我通過運行這個命令創建了一個 Docker Registry 容器(通過本教程,只運行下面的第一個命令)
docker run -d -p 5000:5000 --name registry registry:2
接下來我運行這個 minikube 命令來創建一個本地 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
然后我構建了自己的 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
我想我可能缺少某種 docker 注冊表身份驗證,但是當我在谷歌上搜索時,我找不到我理解的東西。 有人可以指出我正確的方向嗎?
編輯
在使用 ssh 訪問 kubernetes VM 上的bash
並使用以下命令從我的私有注冊表中提取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 中使用的正確地址嗎?
看起來您正在主機上運行注冊表。 實際上,您需要在 VM 內運行注冊表。 您可以通過在 shell 中運行此命令 first eval $(minikube docker-env)
將您的 docker 客戶端指向 minikube VM 內的 docker 守護進程。
然后,您可以在主機上運行 docker build 命令,但它將在 VM 內構建。
事實上,如果您的目標是簡單地運行本地版本的鏡像,您應該運行eval $(minikube docker-env)
以指向 VM 中的imagePullPolicy: IfNotPresent
守護進程,並在您的 pod YAML 中設置imagePullPolicy: IfNotPresent
。 然后,如果可用,kubernetes 將使用本地構建的鏡像。
Docker-Desktop > Kubernetes
也有同樣的問題,我嘗試將imagePullPolicy
設置為Never
並且它正常工作。
正如我從kubectl describe pod mypd
, Kubectl
試圖拉取鏡像,當然這個鏡像不存在於遠程服務器上,因此失敗。
上述屬性將避免連接到注冊表,並將使用來自 docker 本地圖像緩存的圖像。
spec:
template:
spec:
containers:
- image: my/local-image
imagePullPolicy: Never
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.