Docker push: denied: Permission "artifactregistry.repositories.uploadArtifacts" denied on resource "projects/p/locations/l/repositories/r"
Your identity cannot push or pull images in that Artifact Registry repository, or Docker isn't authenticated to the registry host.
Permission "artifactregistry.repositories.uploadArtifacts" denied on resourcedenied: Permission artifactregistry.repositories.downloadArtifacts deniedUnauthenticated request. Unauthenticated requests do not have permission "artifactregistry.repositories.uploadArtifacts"name unknown: Repository "x" not found Artifact Registrydenied: Permission "artifactregistry Meaning
Configure Docker credentials (gcloud auth configure-docker REGION-docker.pkg.dev), grant roles/artifactregistry.writer (push) or reader (pull) on the repository, and ensure the repository exists in that region with the exact path. In CI use a service account key-less auth.
Common causes
- Docker not configured for the registry host
- Missing writer/reader role
- Repository doesn't exist or wrong region/path
- Using gcr.io legacy host after migration
- Cloud Build/Run service agent lacking reader
⚡ Quick fix
gcloud auth configure-docker europe-docker.pkg.dev- Grant
roles/artifactregistry.writerto the pushing identity - Create the repo:
gcloud artifacts repositories create REPO --repository-format=docker --location=REGION
Detailed fix by platform
gcloud
gcloud artifacts repositories add-iam-policy-binding REPO --location REGION --member=serviceAccount:SA --role=roles/artifactregistry.writer
How to diagnose
- Auth — configure-docker done?
- Role — writer/reader?
- Path — Repo exists?
🔧 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
- 409: The resource already exists Compute Engine: ERROR: (gcloud.compute.instances.create) Could not fetch resource: The resource 'projects/p/zones/z/instances/vm-1' already exists
- 429 RESOURCE_EXHAUSTED: Quota exceeded for quota metric Google API: 429 RESOURCE_EXHAUSTED — Quota exceeded for quota metric 'Read requests' and limit 'Read requests per minute per user'
- 502 Bad Gateway: failed_to_connect_to_backend Google Cloud Load Balancing: 502 Bad Gateway — jsonPayload.statusDetails: failed_to_connect_to_backend / backend_connection_closed_before_data_sent_to_client
Most viewed in Google Cloud / Firebase
- Missing or insufficient permissions Firestore: FirebaseError: [code=permission-denied]: Missing or insufficient permissions
- Container failed to start Cloud Run: The user-provided container failed to start and listen on the port defined provided by the PORT=8080 environment variable
- Could not load the default credentials Google Cloud: Error: Could not load the default credentials. Browse to https://cloud.google.com/docs/authentication/getting-started
Other ways to find it
Where this error sits
Origin: Platform & cloud. 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 4 Nov 2026