429 Too Many Requests

Container Registry Pull Rate Exceeded – Quick Fixes That Actually Work

Got rate-limited by Docker Hub or another registry? Here's what causes it and how to fix it fast. Most common fix: authenticate or use a mirror.

1. Not Authenticated to Docker Hub (Most Common)

This is the #1 cause. If you're pulling images without logging in, you're treated as an anonymous user. Docker Hub gives anonymous users 100 pulls per 6 hours per IP. That's not a lot if you're running CI/CD or a busy Kubernetes cluster.

The fix: Log in with a free Docker Hub account. That bumps you to 200 pulls per 6 hours. Still not great, but better. Here's how:

docker login -u yourusername
# then enter your password or a personal access token from hub.docker.com

For CI/CD, store the credentials in a secret. For Kubernetes, create a docker-registry secret:

kubectl create secret docker-registry regcred --docker-server=https://index.docker.io/v1/ --docker-username=youruser --docker-password=yourpat

Then add imagePullSecrets to your pod spec. This one change fixes the 429 error for most small teams.

2. Running Too Many Pulls From the Same IP (CI/CD, Kubernetes Nodes)

If you've got a build pipeline or multiple nodes pulling images at the same time, they all share the same external IP. That burns through your pull quota fast. Even with authentication, 200 pulls per 6 hours disappears when you have 10 nodes restarting pods.

The fix: Set up a local pull-through cache. This is a registry that caches images from Docker Hub. Your nodes pull from this cache, not from Docker Hub directly. It cuts external pulls to one per image version.

The easiest option is Registry 2 with the proxy feature. Run it on a server inside your network:

docker run -d -p 5000:5000 --name registry -v /mnt/registry:/var/lib/registry \
  -e REGISTRY_PROXY_REMOTEURL=https://registry-1.docker.io \
  registry:2

Then point your Docker daemon or containerd to use this as a mirror. In /etc/docker/daemon.json:

{
  "registry-mirrors": ["http://yourcacheip:5000"]
}

For Kubernetes nodes using containerd, edit /etc/containerd/config.toml and add a [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"] section. Restart the service afterward.

This approach works for any registry, not just Docker Hub. If you're hitting rate limits from ghcr.io or quay.io, set up a proxy for those too.

3. Using a Free or Overloaded Registry Without a Paid Plan

Docker Hub's free tier is 200 pulls per 6 hours. If you outgrow that, you need a paid plan. Same goes for GitHub Container Registry (500 pulls per 6 hours unauthenticated, 5000 with auth). For heavy usage, the pull-through cache is better, but sometimes you just need more quota.

The fix: Upgrade to a paid plan, or switch registries. Many teams move to Amazon ECR, Google Artifact Registry, or Azure Container Registry because they don't have hard pull limits (you pay per stored data and transfer). Another option is Harbor, an open-source registry you host yourself. No rate limits, but you handle storage and uptime.

If you stay on Docker Hub, the Pro plan ($5/month) gives you unlimited pulls. That's cheap for a team of 5. The Team plan ($15/user/month) includes more features like team access controls. Pick what fits your scale.

Quick-Reference Summary Table

Cause Symptoms Fix Effort
Not authenticated 429 from Docker Hub, anonymous pull limit hit Run docker login, use image pull secrets Low
Same IP, too many pulls 429 even after login, all nodes hit limit Set up pull-through cache (Registry 2 proxy) Medium
Free tier quota exhausted 429, especially in CI or production clusters Upgrade to paid plan or switch to ECR/ACR/GAR Low to Medium

Start with authentication. If that doesn't fix it, cache the images locally. If you're still hitting limits, you've outgrown the free tier. Pick a plan or move registries. Don't bother with random Docker Hub workarounds like cycling IPs — they break and waste time.

Related Errors in Server & Cloud
ImagePullBackOff Fix Azure ACR Auth Failure Causing ImagePullBackOff in AKS 0XC0030004 RPC_NT_SS_IN_NULL_CONTEXT (0XC0030004) fix for admins 0XC0030061 RPC_NT_PIPE_EMPTY (0XC0030061) — Why It Happens and How to Fix 0X000013AA Fix ERROR_QUORUM_OWNER_ALIVE (0X000013AA) in Failover Cluster

Was this solution helpful?

EP
Erropedia Team
Tech Support Editors
The Erropedia editorial team researches and documents real-world tech errors from across Windows, Linux, macOS, networking, databases, cloud platforms, and more. Every solution is reviewed for accuracy and updated as software and systems evolve.