# Error response from daemon: toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating.

- **ID:** `policy/docker-pull-rate-limit-anonymous`
- **Domain:** policy
- **Category:** network_error
- **Error Code:** `toomanyrequests`
- **Verification:** ai_generated
- **Fix Rate:** 85%

## Root Cause

Docker Hub enforces pull rate limits (100 pulls per 6 hours for anonymous users, 200 for free authenticated users) which are exceeded.

## Version Compatibility

| Version | Status | Introduced | Deprecated |
|---------|--------|------------|------------|
| Docker Engine 24.0.0 | active | — | — |
| Docker Desktop 4.25.0 | active | — | — |
| containerd 1.7.0 | active | — | — |

## Workarounds

1. **Authenticate with Docker Hub using `docker login` to get a higher limit (200 pulls per 6 hours) and access to paid plans.** (90% success)
   ```
   Authenticate with Docker Hub using `docker login` to get a higher limit (200 pulls per 6 hours) and access to paid plans.
   ```
2. **Pull images from a mirror registry like `registry-1.docker.io` or use a proxy cache, e.g., configure `~/.docker/config.json` with `"registry-mirrors": ["https://mirror.gcr.io"]`** (80% success)
   ```
   Pull images from a mirror registry like `registry-1.docker.io` or use a proxy cache, e.g., configure `~/.docker/config.json` with `"registry-mirrors": ["https://mirror.gcr.io"]`
   ```
3. **Upgrade to a Docker Pro or Team subscription for unlimited pulls.** (95% success)
   ```
   Upgrade to a Docker Pro or Team subscription for unlimited pulls.
   ```

## Dead Ends

- **Clearing Docker cache with `docker system prune -a`** — Pruning removes cached images but does not reset the rate limit counter; pulling again still counts against the limit. (90% fail)
- **Using a different Docker Hub username without authentication** — Anonymous pulls are tracked by IP address, not username; changing usernames has no effect without authentication. (85% fail)
- **Restarting the Docker daemon to reset the counter** — The rate limit is enforced server-side by Docker Hub; restarting the daemon does not affect the server's counter. (100% fail)
