Symptoms & Diagnosis
The ErrImagePull status is one of the most common hurdles for Kubernetes developers. It indicates that a container cannot start because the kubelet failed to pull the specified image from the container registry.
When you run kubectl get pods, you will see the pod status listed as ErrImagePull or ImagePullBackOff. While ErrImagePull is the initial error, ImagePullBackOff means Kubernetes is waiting before trying to pull the image again.
To diagnose the specific cause, use the describe command:
kubectl describe pod [POD_NAME]
Scroll down to the “Events” section. Look for messages such as “manifest unknown,” “authorized: authentication required,” or “connection refused.” These logs pinpoint whether the issue is a typo, a permission problem, or a network failure.

Troubleshooting Guide
Fixing ErrImagePull requires a systematic check of your deployment manifest and registry configuration. Follow these steps to resolve the issue.
1. Validate Image Name and Tag
The most frequent cause is a simple typo. Ensure the image name and the tag exist in the registry. Remember that image names are case-sensitive.
# Example of a correct image path
image: gcr.io/google-containers/echoserver:1.10
2. Verify Registry Permissions
If you are using a private registry (like Docker Hub private repos, AWS ECR, or Azure ACR), Kubernetes needs credentials. You must create a docker-registry secret and reference it in your pod spec using imagePullSecrets.
kubectl create secret docker-registry my-registry-key \
--docker-server=DOCKER_REGISTRY_SERVER \
--docker-username=DOCKER_USER \
--docker-password=DOCKER_PASSWORD \
--docker-email=DOCKER_EMAIL
3. Check Network Connectivity
In local environments like Docker Desktop or Minikube, the cluster might lack internet access or be blocked by a firewall. Ensure your nodes can reach the external registry.
| Common Error Message | Probable Root Cause | Recommended Fix |
|---|---|---|
| manifest unknown | Wrong tag or image name | Check spelling and registry tags |
| unauthorized / forbidden | Missing or invalid credentials | Configure imagePullSecrets |
| deadline exceeded | Network timeout | Check node internet/VPN access |
| repository does not exist | Registry path is incorrect | Verify the full URI of the image |
Prevention
To avoid ErrImagePull in production, move away from using the :latest tag. Using :latest can lead to unpredictable behavior and makes it difficult to roll back if a pull fails.
Always use specific version tags or SHA256 digests. This ensures that every node in your cluster pulls the exact same binary and reduces the risk of pulling a broken “latest” image that hasn’t finished propagating across registry mirrors.
Finally, implement a local container registry or a pull-through cache. This reduces external dependencies and speeds up pod startup times by keeping images closer to your worker nodes.