GitLab CI: ERROR: Job failed: failed to pull image "registry.example.com/app:latest" with specified policies [always]: access forbidden
The runner could not pull the job's Docker image — authentication, a wrong name or tag, or a registry rate limit.
failed to pull image with specified policies [always]ERROR: Job failed: failed to pull imageaccess forbidden pulling image GitLab runnertoomanyrequests: You have reached your pull rate limitFailed to pull image Meaning
Private registries need credentials in the DOCKER_AUTH_CONFIG variable (or the runner's config). Docker Hub applies pull-rate limits to anonymous pulls from shared runners; use a registry mirror or authenticate. Tags may simply not exist.
Common causes
- Private image without
DOCKER_AUTH_CONFIGcredentials - Wrong image name or missing tag
- Docker Hub rate limit on shared runners
- Expired token
- Runner without network access to the registry
⚡ Quick fix
- Add
DOCKER_AUTH_CONFIG(CI/CD variable) with the registry auth JSON - Verify the image and tag exist:
docker pulllocally - Use a dependency proxy or mirror to avoid rate limits
Detailed fix by platform
GitLab CI
DOCKER_AUTH_CONFIGvalue:{"auths":{"registry.example.com":{"auth":"<base64 user:token>"}}}- Use
$CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX/node:20for Docker Hub images
Code examples
Pull through the dependency proxy
build:
image: ${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/node:20
script: npm ci && npm testHow to diagnose
- Name — Image and tag correct?
- Auth — Credentials configured?
- Limit — Rate-limit message in the log?
🔧 Still not fixed?
Many errors look alike. If the steps above didn’t solve it, one of these is probably what you’re facing:
Similar errors
- Cannot connect to the Docker daemon (GitLab) GitLab CI: Cannot connect to the Docker daemon at tcp://docker:2375. Is the docker daemon running?
- Cannot perform an interactive login from a non TTY device GitHub Actions: Error: Cannot perform an interactive login from a non TTY device
- denied denied: requested access to the resource is denied (docker push)
Most viewed in CI/CD
- The process '/usr/bin/git' failed with exit code 128 GitHub Actions: Error: The process '/usr/bin/git' failed with exit code 128
- This job is stuck because you don't have any active runners GitLab CI: This job is stuck because you don't have any active runners online or available with any of these tags assigned to them
- Resource not accessible by integration GitHub Actions: Error: Resource not accessible by integration (403)
Other ways to find it
Where this error sits
Origin: Build & delivery. Errors that are often confused with or caused by this one (click to open):
🧠 Still stuck? Analyze your error
Paste the full message, response headers or stack trace — we'll detect the platform and point to the most likely cause.
💬 What worked for others
No tips yet — did something else fix this for you?
Share what worked for you
Tips are checked by an editor before they appear. Links are removed.
Report a correction or suggest an improvement
Last updated 25 Oct 2026