The image name or tag doesn't exist
not found manifest unknown InvalidImageName
What you see
Events:
Type Reason From Message
Warning Failed kubelet Failed to pull image "111122223333.dkr.ecr.us-east-1.amazonaws.com/shop/web:v2.4.l": rpc error: code = NotFound desc = failed to pull and unpack image "111122223333.dkr.ecr.us-east-1.amazonaws.com/shop/web:v2.4.l": failed to resolve reference "111122223333.dkr.ecr.us-east-1.amazonaws.com/shop/web:v2.4.l": 111122223333.dkr.ecr.us-east-1.amazonaws.com/shop/web:v2.4.l: not found# A typo in a Docker Hub repository name looks like a login problem
Warning Failed kubelet Failed to pull image "ngnix:1.27": ... failed to resolve reference "docker.io/library/ngnix:1.27": pull access denied, repository does not exist or may require authorization: server message: insufficient_scope: authorization failedRead the image reference in the message character by character: here the tag ends in a lowercase l, not a 1. Docker and other clients word the same thing as manifest unknown. A reference that can't even be parsed (say, upper-case letters in the repository) never reaches the registry; the status is InvalidImageName instead.
Confirm
# Which image does the Pod ask for, exactly?
kubectl get pod web-7d9f8c6b5-x2k4q -n shop -o jsonpath='{.spec.containers[*].image}'
# Does that tag exist in ECR?
aws ecr describe-images --repository-name shop/web --image-ids imageTag=v2.4.l
# An error occurred (ImageNotFoundException) ... does not exist within the repository with name 'shop/web' ...
# Which tags do exist (newest first)?
aws ecr describe-images --repository-name shop/web --query 'reverse(sort_by(imageDetails,&imagePushedAt))[:5].imageTags'If the tag was there last week, check the repository's lifecycle policy: a rule with "countType": "imageCountMoreThan", "countNumber": 30 deletes old images, and a node replacement or a rollback that needs an old tag then fails.
Fix
- Typo or wrong tag: fix the image in the Deployment (or its Helm values) and let it roll out. Kubelet retries on its own, but a fixed spec needs new Pods.
- The tag was never pushed: the CI job failed or pushed to another repository or Region. Push it, then the next retry pulls it.
- A lifecycle policy expired it: push the image again from your build, and exclude tags that are still deployed from the rule (for example, match only
tagPrefixList: ["pr-"]).
Prevent
- Have CI deploy the exact tag or digest it just pushed (
shop/web@sha256:…), never a hand-typed one. - Turn on tag immutability in ECR so a tag always means the same image, and write lifecycle rules that only expire build or pull-request tags.