Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

kubectl get pods shows ErrImagePull

Im trying to create a pod using my local docker image as follow.

1.First I run this command in terminal

eval $(minikube docker-env)

2.I created a docker image as follow

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

3.I created the pod.yml as shown below and I run this command

kubectl -f create pod.yml.

4.then i tried to run this command

kubectl get pods

but it shows following error


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

5.i get the pods logs

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');
    });

like image 206
Niranga Sandaruwan Avatar asked Mar 28 '19 07:03

Niranga Sandaruwan


People also ask

How do you fix ErrImagePull?

To resolve it, double check the pod specification and ensure that the repository and image are specified correctly. If this still doesn't work, there may be a network issue preventing access to the container registry. Look in the describe pod text file to obtain the hostname of the Kubernetes node.

What does ErrImagePull mean?

Basically ErrImagePull means kubernetes is unable to locate the image, bappa/posts:0.0. 1 This could either be the registry settings are not correct in the worker nodes or your image name or tags are not correct. Just like @Henry explained issue a 'kubectl describe pod posts and inspect (and share) the error messages.


1 Answers

Reason

This is because it can't download the docker image defined in your pod definition file. By default it downloads required images from DockerHub.

Way 1

So after creating your my-first-image:3.0.0 image you have to publish it at DockerHub. For that create an account at DockerHub and login from terminal using login command

sudo docker login

After successful login, rebuild your docker image with your DockerHub username in tag and push it to DockerHub (more details)

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

Update your image in pod.yml as YOUR_DOCKERHUB_USERNAME/my-first-image:3.0.0 and create your pods as before.

Way 2

You can instruct to find required docker image from your local machine instead of downloading from DockerHub. To do so you have to add imagePullPolicy: Never in your pod.yml file under specific container description. Below is an example of your pod.yml file to show where to define image pull policy

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
like image 180
Shalauddin Ahamad Shuza Avatar answered Nov 15 '22 16:11

Shalauddin Ahamad Shuza