How to fix Error response from daemon: manifest for nginx:nonexistent not found: manifest unknown: manifest unknown in Docker

DockerBEGINNERLOWUpdated Dec 6, 2025ยท 174 views

This error occurs when Docker cannot find the specified image tag in the container registry. The most common cause is requesting a tag that doesn't exist, such as a typo in the version number or using 'latest' when it was never pushed.

Quick fix

Fixes Error response from daemon: manifest for nginx:nonexistent not found: manifest unknown: manifest unknown

https://hub.docker.com/_/<image-name>/tags
  1. Check available tags on Docker Hub
  2. Fix common tag typos
  3. Use a specific version tag instead of 'latest'
  4. Verify the correct image name
docker โ€” error
https://hub.docker.com/_/<image-name>/tags
Error response from daemon: manifest for nginx:nonexistent not found: manifest unknown: manifest unknown

What this error means

When you run `docker pull` or `docker run`, Docker contacts the container registry (like Docker Hub) to fetch the image manifest. The manifest is a JSON file that describes the image layers, configuration, and supported platforms. This error means the registry returned "manifest unknown" - indicating that no manifest exists for the specific image:tag combination you requested. In the example `nginx:nonexistent`, Docker found the `nginx` repository but there's no tag called `nonexistent`. The error format typically looks like: ``` Error response from daemon: manifest for <image>:<tag> not found: manifest unknown: manifest unknown ``` This is one of the most common Docker errors, usually caused by a simple typo or requesting a tag that was never published.

Typical symptoms

  • Docker pull fails immediately without downloading any layers
  • Docker run fails before creating the container
  • Error message shows 'manifest for <image>:<tag> not found'
  • Error includes 'manifest unknown: manifest unknown'
  • The same image works with a different tag
  • Docker Compose up fails during the image pull phase
  • CI/CD pipeline fails at container image pull step

Common causes

  1. The tag you specified does not exist in the registry
  2. Typo in the tag name (e.g., 'latests' instead of 'latest')
  3. Typo in version number (e.g., '20.4' instead of '20.04')
  4. The 'latest' tag was never pushed to this repository
  5. The image or tag was deleted from the registry
  6. Using a deprecated image that has been renamed
  7. Case sensitivity issue in the tag name
  8. The tag exists but not for your platform architecture

How to fix "Error response from daemon: manifest for nginx:nonexistent not found: manifest unknown: manifest unknown"

1Check available tags on Docker Hub

The first step is to verify which tags actually exist for the image.

For official Docker Hub images, visit:

bash
https://hub.docker.com/_/<image-name>/tags

For example, for nginx: https://hub.docker.com/_/nginx/tags

For user/organization images, visit:

bash
https://hub.docker.com/r/<username>/<image-name>/tags

Using the command line:

bash
# List tags via Docker Hub API (official images)
curl -s "https://registry.hub.docker.com/v2/repositories/library/nginx/tags?page_size=100" | jq -r '.results[].name'

# List tags for user images
curl -s "https://registry.hub.docker.com/v2/repositories/username/myimage/tags?page_size=100" | jq -r '.results[].name'
2Fix common tag typos

Review your image:tag for common mistakes:

bash
# Version number typos
docker pull ubuntu:20.4      # WRONG - should be 20.04
docker pull node:18.0        # WRONG - should be 18 or 18.0.0
docker pull python:3.10      # CORRECT - but 3.1 and 3.10 are different!

# Spelling mistakes
docker pull nginx:latests    # WRONG - should be latest
docker pull nginx:alpnie     # WRONG - should be alpine
docker pull nginx:mainlne    # WRONG - should be mainline

# Case sensitivity
docker pull nginx:Alpine     # WRONG - should be alpine (lowercase)

Docker tags are case-sensitive. Always double-check the exact tag name from the registry.

3Use a specific version tag instead of 'latest'

Many images do not have a latest tag. When no tag is specified, Docker defaults to latest, which may not exist.

bash
# These may fail if 'latest' doesn't exist
docker pull kibana           # Implicitly uses :latest
docker pull kibana:latest    # Explicitly uses :latest

# Use specific versions instead
docker pull kibana:8.11.3    # CORRECT - use actual version
docker pull elasticsearch:8.11.3

Images commonly without a 'latest' tag:
- Elasticsearch and Kibana
- Hyperledger Fabric images
- Some Microsoft images
- Many enterprise software images

Always check the registry for available tags rather than assuming latest exists.

4Verify the correct image name

Some popular images have been renamed or moved to new namespaces:

bash
# Deprecated images that will fail
docker pull jenkins:latest           # Deprecated
docker pull microsoft/dotnet:latest  # Moved to MCR

# Correct alternatives
docker pull jenkins/jenkins:lts
docker pull mcr.microsoft.com/dotnet/aspnet:8.0

Check for similar image names:

bash
# Search Docker Hub
docker search nginx

# These are different images!
docker pull nginx           # Official nginx
docker pull nginxinc/nginx  # Nginx Inc's image
docker pull bitnami/nginx   # Bitnami's nginx

Read the image's Docker Hub page for deprecation notices.

5Check platform architecture compatibility

If the tag exists but doesn't support your platform (e.g., ARM vs x86), you'll get a manifest error.

bash
# Check what platforms an image supports
docker manifest inspect nginx:alpine

# Pull for a specific platform
docker pull --platform linux/amd64 nginx:alpine
docker pull --platform linux/arm64 nginx:alpine

This is common on:
- Apple Silicon Macs (arm64)
- Raspberry Pi and ARM servers
- Windows ARM devices

If your platform isn't supported, you may need to find an alternative image or build your own.

6Verify registry authentication for private images

For private registries, authentication failures sometimes appear as "manifest not found" errors.

bash
# Log in to Docker Hub
docker login

# Log in to a private registry
docker login registry.example.com

# Log in to GitHub Container Registry
docker login ghcr.io -u USERNAME -p YOUR_PAT

# Log in to AWS ECR
aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 123456789012.dkr.ecr.us-east-1.amazonaws.com

After logging in, retry the pull. If the image is private, ensure you have read access to the repository.

7Use the correct registry URL

Ensure you're pulling from the correct registry:

bash
# Docker Hub (default)
docker pull nginx:alpine
docker pull docker.io/library/nginx:alpine

# GitHub Container Registry (new)
docker pull ghcr.io/owner/image:tag

# GitHub Packages (deprecated - may fail!)
docker pull docker.pkg.github.com/owner/repo/image:tag  # DEPRECATED

# Amazon ECR
docker pull 123456789012.dkr.ecr.us-east-1.amazonaws.com/myimage:tag

# Google Container Registry
docker pull gcr.io/project-id/image:tag

# Azure Container Registry
docker pull myregistry.azurecr.io/image:tag

If using GitHub packages, migrate from docker.pkg.github.com to ghcr.io.

Advanced notes

### Understanding Docker Image Tags

Tags are mutable labels pointing to specific image digests. The same tag can point to different images over time (e.g., latest changes with each release).

For reproducible builds, use immutable SHA256 digests:

bash
# Pull by digest (immutable)
docker pull nginx@sha256:6926dd802f40e5e7257fded83e0d8030039642e4e10c4a98a6478e9c6f0a6f63

# Get the digest for a tag
docker inspect --format='{{index .RepoDigests 0}}' nginx:alpine

### Listing All Tags with skopeo

For advanced tag inspection, use skopeo:

bash
# Install skopeo
# Ubuntu/Debian: apt install skopeo
# macOS: brew install skopeo

# List all tags
skopeo list-tags docker://nginx

# Inspect image without pulling
skopeo inspect docker://nginx:alpine

### Registry API Direct Queries

Query the Docker Registry HTTP API directly:

bash
# Get auth token (for Docker Hub)
TOKEN=$(curl -s "https://auth.docker.io/token?service=registry.docker.io&scope=repository:library/nginx:pull" | jq -r .token)

# List tags
curl -s -H "Authorization: Bearer $TOKEN" "https://registry-1.docker.io/v2/library/nginx/tags/list" | jq

# Check if specific tag exists
curl -sI -H "Authorization: Bearer $TOKEN" "https://registry-1.docker.io/v2/library/nginx/manifests/alpine"
# 200 = exists, 404 = not found

### Multi-Architecture Manifests

Modern images use manifest lists (fat manifests) for multi-arch support:

bash
# View manifest list
docker manifest inspect nginx:alpine

# Create your own multi-arch manifest
docker manifest create myimage:latest \
  myimage:amd64 \
  myimage:arm64
docker manifest push myimage:latest

### Rate Limiting on Docker Hub

Docker Hub limits pulls for anonymous and free users. Rate limit errors can sometimes appear confusing. Check your status:

bash
TOKEN=$(curl -s "https://auth.docker.io/token?service=registry.docker.io&scope=repository:library/nginx:pull" | jq -r .token)
curl -sI -H "Authorization: Bearer $TOKEN" https://registry-1.docker.io/v2/library/nginx/manifests/latest 2>&1 | grep -i ratelimit

To avoid rate limits:
- Log in to Docker Hub (authenticated users get higher limits)
- Use a Docker Hub mirror
- Cache images locally with a registry mirror

Frequently asked questions

What does "Error response from daemon: manifest for nginx:nonexistent not found:" mean?
When you run docker pull or docker run, Docker contacts the container registry (like Docker Hub) to fetch the image manifest. The manifest is a JSON file that describes the image layers, configuration, and supported platforms. This error means the registry returned "manifest unknown" - indicating that no manifest exists for the specific image:tag combination you requested.
How do I fix "Error response from daemon: manifest for nginx:nonexistent not found:"?
This error occurs when Docker cannot find the specified image tag in the container registry. The most common cause is requesting a tag that doesn't exist, such as a typo in the version number or using 'latest' when it was never pushed.
What causes "Error response from daemon: manifest for nginx:nonexistent not found:"?
The tag you specified does not exist in the registry Typo in the tag name (e.g., 'latests' instead of 'latest') Typo in version number (e.g., '20.4' instead of '20.04')
Is the "Error response from daemon: manifest for nginx:nonexistent not found:" error serious?
It is a low-severity error โ€” more of a blocker than a risk. The steps above resolve it.

Official resources & further reading