显示状态的“ kubectl get pods”-ImagePullbackOff

时间:2018-07-04 01:52:57

标签: docker kubernetes docker-registry minikube

我在机器上设置了一个自托管注册表,以存储docker映像文件,并使用 minikube (用于本地开发的轻量级Kubernetes实现)对其进行了全面测试。

尽管我能够使用 docker push docker pull 命令从本地注册表中成功推送和拉出存储库,但是尝试在本地运行Pod时,面临以下问题:

错误

Failed to pull image "localhost:5000/dev/customer:v1": rpc error: code = Unknown desc
= Error response from daemon: Get http://localhost:5000/v2/: dial tcp 127.0.0.1:5000: getsockopt: connection refused

这是我在检查广告连播时注意到的事件列表。

Pod活动

Type     Reason                 Age                From               Message

----     ------                 ----               ----               -------

Normal   Scheduled              16m                default-scheduler  Successfully assigned custappdeployment-6c8ddcc5d8-2zdfn to minikube

Normal   SuccessfulMountVolume  16m                kubelet, minikube  MountVolume.SetUp succeeded for volume "default-token-s5nlw"

Normal   BackOff                16m (x2 over 16m)  kubelet, minikube  Back-off pulling image "localhost:5000/dev/customer:v1"

Warning  Failed                 16m (x2 over 16m)  kubelet, minikube  Error: ImagePullBackOff

Normal   Pulling                15m (x3 over 16m)  kubelet, minikube  pulling image "localhost:5000/dev/customer:v1"

Warning  Failed                 15m (x3 over 16m)  kubelet, minikube  Failed to pull image "localhost:5000/dev/customer:v1": rpc error: code = Unknown desc
= Error response from daemon: Get http://localhost:5000/v2/: dial tcp 127.0.0.1:5000: getsockopt: connection refused

Warning  Failed                 15m (x3 over 16m)  kubelet, minikube  **Error: ErrImagePull**

Please see below the docker pull command output. 

PS C:\Sunny\Projects\NodeApps\Nodejs-Apps\Customer> docker pull localhost:5000/dev/customer:v1

v1: Pulling from dev/customer
Digest: sha256:edf0b716728b1cc00f7d8eed76fb3bdceadf1a60a46b9e4f80d983a64389e95c
Status: Image is up to date for localhost:5000/dev/customer:v1

3 个答案:

答案 0 :(得分:3)

好吧,从localhost的角度来看,我不希望您的 localhostminikube相同。实际上,从kubernetes世界的角度来看,我不希望您的本地主机与任何主机相同。

因此,您需要检查一些实际的事情:

  • 是否可以从非您的计算机访问端口5000(这意味着minikube虚拟机可能会从您计算机上的端口5000拔出)

    这个问题可能与下面的要点相交,因为您的注册表很可能正在侦听一个内部适配器,但这并不是您的计算机所知道的,或者相反。

  • 可以微型解析您的计算机表示的主机名(因为我实际上不认为您可以在docker映像参考中使用IP地址);显然,如果该假设不成立,则无需担心这一部分

  • ,并确保docker不信任注册表的CA,或者您已经将证书加载到minikube并退回了docker

您总是可以作弊,因为minikube是一个虚拟机(而不是整个节点组),而docker save $the_image_ref | minikube ssh docker load会完全绕开拉动(除非您拥有imagePullPolicy: Always,但这很容易解决) )。

答案 1 :(得分:1)

如果您正在使用私有Docker注册表,请将注册表绑定到0.0.0.0,以便可以从其他服务器进行访问。 另外,如果其注册表不安全,请将此URL添加到docker daemon不安全注册表列表中。

答案 2 :(得分:0)

我按照以下步骤解决了该问题。

  1. 仔细检查标签名称,确保它们一致

  2. 在本地生成图像,请确保对其进行标记

  3. 将图像推送到docker hub