`ImagePullBackOff` Is Usually Kubernetes Telling You the Image Name, Tag, or Registry Auth Does Not Match Reality Even if Your YAML Looks Confident
A practical guide to fixing Kubernetes `ImagePullBackOff` by checking the real image reference, registry credentials, event messages, and pull secrets instead of staring at pod status lines.
Why this error matters:
ImagePullBackOffis often one of the cleanest Kubernetes failures you will ever get. The cluster is telling you it cannot fetch the image. The trick is to stop reading only the status and inspect the exact reason.
When a deployment never becomes ready and kubectl get pods shows:
ImagePullBackOffthe actual root cause is usually one of a few things:
- wrong image name
- wrong tag
- private registry credentials missing
- image does not exist in the registry you think it does
- node cannot reach the registry
Start with describe, not guesswork
Run:
kubectl describe pod my-pod -n my-namespaceThen scroll to the Events section. That is where Kubernetes usually says the useful part, such as:
manifest unknownpull access deniedunauthorizedrepository does not exist
That message is far more valuable than the high-level ImagePullBackOff status.
Check the image reference in the workload
Read what the deployment actually says:
kubectl get deployment my-app -n my-namespace -o yaml | grep image:Verify:
- repository path is correct
- tag exists
- registry hostname is right
It is common to assume an image was pushed as:
ghcr.io/acme/api:latestwhen the cluster is actually trying to pull:
ghcr.io/acme/backend:latestIf the registry is private, check the pull secret
List secrets:
kubectl get secrets -n my-namespaceInspect the service account if you expect an imagePullSecret there:
kubectl get serviceaccount default -n my-namespace -o yamlIf needed, attach a secret in the pod spec:
imagePullSecrets:
- name: regcredOr create one:
kubectl create secret docker-registry regcred \
--docker-server=ghcr.io \
--docker-username=YOUR_USER \
--docker-password=YOUR_TOKEN \
[email protected] \
-n my-namespaceConfirm the image actually exists
Before blaming Kubernetes, confirm the CI pipeline really pushed the tag you referenced. A very normal failure pattern is:
- deployment updated to
:2026-05-28-1234 - CI failed before pushing
- cluster keeps trying to pull a tag that was never published
That is not a cluster mystery. That is a release mismatch.
Force a clean retry after fixing it
Once the image ref or secret is corrected:
kubectl rollout restart deployment/my-app -n my-namespace
kubectl get pods -n my-namespace -wWatch the next pod come up instead of assuming the old backoff state will heal by itself.
Final recommendation
Treat ImagePullBackOff as a registry truth problem. Use kubectl describe, verify the real image reference, confirm the tag exists, and check pull secrets before touching unrelated deployment settings.