The 'manifest not found' or 'manifest unknown' error occurs when Docker cannot locate the image manifest in the registry. This typically happens because the image tag doesn't exist, the image name is misspelled, or the 'latest' tag was never pushed to the repository.
This error indicates that Docker's daemon was unable to retrieve the manifest for the requested image from the container registry. A manifest is a JSON file that contains metadata about a Docker image, including its layers, configuration, and platform support. When you run `docker pull` or `docker run`, Docker first fetches the manifest to understand what layers need to be downloaded. If the manifest doesn't exist for the specified image:tag combination, this error is returned. The most common scenarios that trigger this error: 1. **The tag doesn't exist** - You're requesting a tag (like `latest`) that was never pushed to the registry 2. **Typo in image name or tag** - A small spelling mistake in the image name or version number 3. **The image was deleted** - The image or tag was removed from the registry 4. **Architecture mismatch** - No manifest exists for your system's CPU architecture
First, confirm that the exact image:tag combination exists in the registry.
# Search for the image on Docker Hub
docker search myimage
# Check available tags at hub.docker.com
# Visit: https://hub.docker.com/_/[image-name]/tagsFor Docker Hub, you can also use the API to list available tags:
# List tags for an official image
curl -s https://registry.hub.docker.com/v2/repositories/library/nginx/tags | jq '.results[].name'
# List tags for a user image
curl -s https://registry.hub.docker.com/v2/repositories/username/myimage/tags | jq '.results[].name'If the tag doesn't appear in the list, you'll need to use a different tag or push the missing tag.
Many images do not have a latest tag. Always use a specific version tag:
# Instead of
docker pull kibana:latest # May not exist!
# Use a specific version
docker pull kibana:8.16.5Common images without a latest tag include:
- Elasticsearch/Kibana
- Many Hyperledger Fabric images
- Various CI/CD tool images
Check the image's Docker Hub page for available tags before pulling.
Double-check the spelling of both the image name and tag:
# Common mistakes
docker pull ubuntu:20.4 # Wrong! Should be 20.04
docker pull mongdb:latest # Wrong! Should be mongo
docker pull postgress:15 # Wrong! Should be postgres
docker pull ngnix:alpine # Wrong! Should be nginxPay special attention to:
- Version numbers (dots and digits)
- Image names (common misspellings)
- Namespace/username (case-sensitive)
Some popular images have been renamed or moved to new namespaces:
# Jenkins - the old image is deprecated
docker pull jenkins:latest # WRONG - deprecated
docker pull jenkins/jenkins:lts # CORRECT
# Microsoft images moved to MCR
docker pull microsoft/dotnet:latest # WRONG - deprecated
docker pull mcr.microsoft.com/dotnet/aspnet:8.0 # CORRECT
# Hyperledger Fabric images require specific versions
docker pull hyperledger/fabric-peer:latest # May not exist
docker pull hyperledger/fabric-peer:2.5 # CORRECTCheck the Docker Hub page for deprecation notices and migration instructions.
If you're on an ARM-based system (like Apple Silicon) or need a specific architecture, use the --platform flag:
# Pull the AMD64 version on an ARM machine
docker pull --platform linux/amd64 ubuntu:22.04
# Pull the ARM64 version explicitly
docker pull --platform linux/arm64 nginx:alpine
# Check available platforms for an image
docker manifest inspect nginx:alpineThis is especially useful for:
- Running x86 images on Apple Silicon Macs
- Ensuring consistent builds across CI/CD and development machines
- Debugging platform-specific issues
If using GitHub Container Registry, use ghcr.io instead of the deprecated docker.pkg.github.com:
# Old (deprecated) - may fail with manifest not found
docker pull docker.pkg.github.com/owner/repo/image:tag
# New (correct)
docker pull ghcr.io/owner/image:tagThe old GitHub Docker Registry (docker.pkg.github.com) doesn't support the manifest endpoint properly. Migrate to ghcr.io for reliable pulls.
If you're using a private registry and the manifest became corrupted (e.g., after moving storage or changing certificates), re-push the affected images:
# Tag the image if needed
docker tag myimage:latest registry.example.com/myimage:latest
# Push to refresh the manifest
docker push registry.example.com/myimage:latestFor self-hosted registries, also check:
- Registry logs for errors
- Storage backend connectivity
- Certificate validity
Older Docker versions may not support newer manifest formats. Update Docker:
# Check current version
docker --version
# On Ubuntu/Debian
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
# On macOS/Windows
# Download the latest Docker Desktop from docker.comManifest format V2 Schema 2 requires Docker 1.10+. Most modern images use this format.
### Understanding Docker Manifests
A Docker manifest is metadata that describes an image. For multi-architecture images, Docker uses a "manifest list" (also called a "fat manifest") that points to platform-specific manifests.
View an image's manifest:
docker manifest inspect nginx:alpine### Using Image Digests Instead of Tags
If tags are unreliable, you can pull by SHA256 digest:
# Get the digest from Docker Hub or by inspecting the manifest
docker pull nginx@sha256:abc123...
# Pin to a specific digest in Dockerfiles
FROM nginx@sha256:abc123...This ensures you always get the exact same image, regardless of tag changes.
### Registry Authentication Issues
Sometimes "manifest not found" actually indicates an authentication problem. The registry may return a 404 instead of a 401 for security reasons. Try logging in explicitly:
docker login registry.example.com
docker pull registry.example.com/private/image:tag### Debugging with Verbose Output
Enable Docker debug mode for more details:
# Temporary - for one command
DOCKER_CLI_DEBUG=1 docker pull myimage:tag
# Check daemon logs
journalctl -u docker.service -f### Rate Limiting vs Manifest Not Found
Docker Hub rate limits can sometimes manifest as confusing errors. Check your rate limit status:
TOKEN=$(curl -s "https://auth.docker.io/token?service=registry.docker.io&scope=repository:library/alpine:pull" | jq -r .token)
curl -sI -H "Authorization: Bearer $TOKEN" https://registry-1.docker.io/v2/library/alpine/manifests/latest | grep -i ratelimitdockerfile parse error line 5: unknown instruction: RRUN
How to fix 'unknown instruction' Dockerfile parse error in Docker
Error response from daemon: manifest for nginx:nonexistent not found: manifest unknown: manifest unknown
How to fix 'manifest for image:tag not found' in Docker
Error response from daemon: invalid reference format: repository name must be lowercase
How to fix 'repository name must be lowercase' in Docker
Error response from daemon: No such image
How to fix 'No such image' in Docker
Error response from daemon: Container is not running
How to fix 'Container is not running' when using docker exec