首页 > 解决方案 > kubectl get pods 显示 ErrImagePull

问题描述

我正在尝试使用我的本地 docker 映像创建一个 pod,如下所示。

1.首先我在终端运行这个命令

eval $(minikube docker-env)

2.我创建了一个docker镜像如下

sudo docker image build -t my-first-image:3.0.0 .

3.我创建了如下所示的 pod.yml 并运行此命令

kubectl -f create pod.yml.

4.然后我尝试运行这个命令

kubectl get pods

但它显示以下错误


NAME                             READY   STATUS             RESTARTS   AGE
multiplication-b47499db9-phpb7   0/1     ImagePullBackOff   0          23h
my-first-pod                     0/1     ErrImagePull       0          7s

5.我得到豆荚日志

kubectl describe pod my-first-pod 

Events:
  Type     Reason     Age                From               Message
  ----     ------     ----               ----               -------
  Normal   Scheduled  99s                default-scheduler  Successfully assigned default/my-first-pod to minikube
  Warning  Failed     41s (x3 over 94s)  kubelet, minikube  Failed to pull image "my-first-image:3.0.0": rpc error: code = Unknown desc = Error response from daemon: pull access denied for my-first-image, repository does not exist or may require 'docker login'
  Warning  Failed     41s (x3 over 94s)  kubelet, minikube  Error: ErrImagePull
  Normal   BackOff    12s (x4 over 93s)  kubelet, minikube  Back-off pulling image "my-first-image:3.0.0"
  Warning  Failed     12s (x4 over 93s)  kubelet, minikube  Error: ImagePullBackOff
  Normal   Pulling    0s (x4 over 98s)   kubelet, minikube  pulling image "my-first-image:3.0.0"

Dockerfile

    FROM node:carbon
    WORKDIR /app
    COPY . .
    CMD [ "node", "index.js" ]

pods.yml

    kind: Pod
    apiVersion: v1
    metadata:
     name: my-first-pod
    spec:
     containers:
     - name: my-first-container
       image: my-first-image:3.0.0

index.js

    var http = require('http');
    var server = http.createServer(function(request, response) {
     response.statusCode = 200;
     response.setHeader('Content-Type', 'text/plain');
     response.end('Welcome to the Golden Guide to Kubernetes
    Application Development!');
    });
    server.listen(3000, function() {
     console.log('Server running on port 3000');
    });

标签: dockerkuberneteskubectlminikube

解决方案


原因

这是因为它无法下载您的 pod 定义文件中定义的 docker 镜像。默认情况下,它从DockerHub下载所需的图像。

方式一

因此,在创建my-first-image:3.0.0映像后,您必须将其发布到 DockerHub。为此,在 DockerHub 上创建一个帐户并使用login命令从终端登录

sudo docker login

登录成功后,使用标签中的 DockerHub 用户名重建您的 docker 镜像并将其推送到 DockerHub(更多详细信息

sudo docker image build -t YOUR_DOCKERHUB_USERNAME/my-first-image:3.0.0 .
sudo docker push YOUR_DOCKERHUB_USERNAME/my-first-image:3.0.0

pod.yml在as中更新您的图像YOUR_DOCKERHUB_USERNAME/my-first-image:3.0.0并像以前一样创建您的 pod。

方式二

您可以指示从本地机器查找所需的 docker 映像,而不是从 DockerHub 下载。为此,您必须在特定容器描述下添加imagePullPolicy: Never文件pod.yml。下面是一个pod.yml文件示例,用于显示在何处定义图像拉取策略

kind: Pod
apiVersion: v1
metadata:
 name: my-first-pod
spec:
 containers:
 - name: my-first-container
   image: YOUR_DOCKERHUB_USERNAME/my-first-image:3.0.0
   imagePullPolicy: Never

推荐阅读