skip to Main Content

I’m trying to run some docker images on Kubernetes.

docker images

master* $ docker images                                              [15:16:49]                                                                                
REPOSITORY                    TAG           IMAGE ID       CREATED             SIZE
usm                           latest        4dd5245393bf   About an hour ago   158MB
kuard                         latest        497961f486c7   4 days ago          22.9MB

docker container

master* $ docker ps                                                  [15:21:40]
CONTAINER ID   IMAGE                                 COMMAND                  CREATED             STATUS             PORTS                                                                                                                                  NAMES
a46850d28303   usm                                   "/docker-entrypoint.…"   About an hour ago   Up About an hour   0.0.0.0:6061->80/tcp, :::6061->80/tcp                                                                                                  usm
88471e086486   gcr.io/k8s-minikube/kicbase:v0.0.32   "/usr/local/bin/entr…"   2 days ago          Up 2 hours         127.0.0.1:49157->22/tcp, 127.0.0.1:49156->2376/tcp, 127.0.0.1:49155->5000/tcp, 127.0.0.1:49154->8443/tcp, 127.0.0.1:49153->32443/tcp   minikube

Dockerfile

FROM nginx
COPY ./dist /usr/share/nginx/html
EXPOSE 80

kube version

master* $ minikube version                                           [15:37:13]
minikube version: v1.26.0
commit: f4b412861bb746be73053c9f6d2895f12cf78565

When I run kubectl run mypod --image=usm, I get ErrImagePull

How to run the pod with the local docker image?

master* $ kubectl run mypod --image=usm
pod/mypod created
master* $ kubectl get pods                                           [15:07:49]
NAME    READY   STATUS         RESTARTS   AGE
mypod   0/1     ErrImagePull   0          6s

I’m trying to set the imagePullPolicy to never

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - image: usm
    imagePullPolicy: Never
    name: mypod
    ports:
    - containerPort: 80
      name: http
      protocol: TCP
master* $ kubectl apply -f kube-pod-usm.yaml                         [15:55:39]
pod/mypod created
master* $ kubectl get pods                                           [15:55:54]
NAME    READY   STATUS              RESTARTS   AGE
mypod   0/1     ErrImageNeverPull   0          42s

2

Answers


  1. When a Kubernetes cluster creates a new deployment or updates an existing deployment, it needs to pull an image. This is done through the kubelet process on each user node. In order for kubelets to pull this image successfully, they must be accessible from all nodes in the cluster that match the scheduling request.

    Edit pod specification and provide the correct registry

    If you set the Image pull Policy to Never :
    the kubelet does not try fetching the image. If the image is somehow already present locally (in the local registry of Kubernetes), the kubelet attempts to start the container; otherwise, startup fails.

    Login or Signup to reply.
  2. You need that image to be available in someplace. Normally this is done through a registry, but for local development, you can just upload your local image to your minikukbe cluster with the following command:

    minikube image load image:tag

    You may also want to check minikube docker-env which allows pointing your terminal docker-cli to the docker inside minikube in a simple way.

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search