Skip to content
Developer Tools · Container Infrastructure

Top 8 Container Registries for 2026: Pull Rate Limits, Retention, Scanning, and Egress Priced

Docker Hub, GHCR, GitLab, Harbor, ECR, Artifact Registry, ACR, and JFrog compared on the four things that actually decide the bill.

By ·Sep 18, 2026·18 min·8 tools compared
Container RegistryDockerKubernetesDevOpsDeveloper ToolsSupply Chain Security

The most consequential fact on this page is one most comparisons get wrong.

Docker Hub's current pull rate limits, per 6 hours, are 100 pulls for unauthenticated users (counted per IPv4 address or IPv6 /64 subnet), 200 for authenticated Personal accounts, and unlimited for Pro, Team, and Business, subject to fair use. Docker announced much stricter hourly limits for 1 April 2025, 10 pulls an hour unauthenticated and 100 an hour for free accounts, and then confirmed on 8 April 2025 that it had not enforced them. It also cancelled the planned image pull consumption fees outright and delayed storage-based billing indefinitely, promising at least six months notice. A large amount of published advice still describes that withdrawn policy as though it took effect.

That is better news than the internet believes, and it still does not save a CI fleet behind shared NAT, because the unauthenticated limit is per IP range rather than per user.

The short answer on registries. GitHub Container Registry if your code is on GitHub, because GitHub documents container registry storage and bandwidth as currently free. Amazon ECR if you run on ECS, EKS, Lambda, or Fargate, because in-region pulls to your own compute cost $0.00 per GB. Google Artifact Registry on GKE or Cloud Run, where co-location makes traffic free. Azure Container Registry if predictable flat pricing matters more than consumption billing. Harbor if you need it inside your own network or want a proxy cache. Docker Hub for publishing public images rather than pulling them in production. GitLab if source, CI, and deploy already live there. JFrog if the real problem is every artifact type, not just images.

Note

Four things decide the bill, and only one of them is storage. Storage has converged at roughly $0.10 per GB-month across AWS, Google, and Azure, so it is rarely the expensive part. Egress is free in-region and metered everywhere else. Scanning is a separate per-image meter almost everywhere: AWS charges $0.09 per initial Inspector scan and $0.01 per rescan, and its own worked example puts 1,500 images rescanned 15 times a month at $225 in rescans alone. Retention is what stops all three growing forever.

The fix for rate limiting is architectural, not commercial. Cache upstream images in a registry you control: an ECR pull-through cache rule, an Artifact Registry remote repository, or a Harbor proxy cache project. A 200-node rollout then generates one upstream pull instead of 200, and the shared-IP problem disappears with it. Docker itself lists Artifactory, AWS CodeBuild, ECS and Fargate, Azure Pipelines, CircleCI, Codefresh, Drone.io, GitLab, and TeamCity among the platforms where a shared address can trigger abuse rate limiting even for authenticated pulls.

One more detail that silently doubles consumption: a pull of a multi-architecture image counts as one pull per architecture. A build matrix covering amd64 and arm64 burns its limit twice as fast as the pull count suggests. Version checks, where a client confirms a tag exists without downloading it, do not count.

Every price and limit here was read from the vendor's own pricing page, documentation, or retail price API in September 2026. Where a vendor's own pages could not be read, as with JFrog, this page says so rather than repeating a figure from a comparison site.

Choosing a registry is one part of a supply chain decision. The scanning, signing, and provenance side is covered in the container security tools comparison and the software supply chain security comparison, which this page deliberately does not repeat.

Quick Comparison

RegistryPull Rate LimitStorage PriceEgress PriceVulnerability Scanning
GitHub Container RegistryNo published per-pull rate limitContainer registry storage currently free; public packages freeContainer registry bandwidth currently freeNot built in; use a scanner in CI
Amazon ECRNo published per-pull rate limit$0.10 per GB-month private; 500 MB/mo free for 12 months$0.00 in-region to ECS/EKS/Lambda/Fargate; $0.09 per GB to internetBasic scan-on-push included; Inspector enhanced $0.09 first scan, $0.01 per rescan
Google Artifact RegistryNo published per-pull rate limit$0.10 per GiB-month; first 0.5 GiB-month freeFree within the same location; $0.01 per GiB US to US cross-regionArtifact Analysis billed separately, rate not published on the pricing page
Azure Container RegistryNo published per-pull rate limitIncluded 10 / 100 / 500 GB by tier, then $0.10 per GB-monthStandard Azure egress appliesMicrosoft Defender for Containers, billed separately
HarborYou set it; proxy cache absorbs upstream limitsYour storage, your billYour network, your billTrivy built in, no per-scan charge
Docker Hub100 per 6 hours unauthenticated, 200 per 6 hours Personal, unlimited on paidPersonal: 1 private repo. Storage billing indefinitely delayedNot separately meteredDocker Scout: 1 repo Personal, 2 Pro, unlimited Team and Business
GitLab Container RegistryNo published per-pull rate limitCounts against namespace storage; add-on $5/mo per 10 GiB annuallyNot separately publishedContainer scanning in Ultimate
JFrog ArtifactoryNo published per-pull rate limitConsumption-based on storage and transfer; rate card not machine-readableConsumption-basedXray, sold separately

GitHub Container Registry

Pull Rate Limit
No published per-pull rate limit
Storage Price
Container registry storage currently free; public packages free
Egress Price
Container registry bandwidth currently free
Vulnerability Scanning
Not built in; use a scanner in CI

Amazon ECR

Pull Rate Limit
No published per-pull rate limit
Storage Price
$0.10 per GB-month private; 500 MB/mo free for 12 months
Egress Price
$0.00 in-region to ECS/EKS/Lambda/Fargate; $0.09 per GB to internet
Vulnerability Scanning
Basic scan-on-push included; Inspector enhanced $0.09 first scan, $0.01 per rescan

Google Artifact Registry

Pull Rate Limit
No published per-pull rate limit
Storage Price
$0.10 per GiB-month; first 0.5 GiB-month free
Egress Price
Free within the same location; $0.01 per GiB US to US cross-region
Vulnerability Scanning
Artifact Analysis billed separately, rate not published on the pricing page

Azure Container Registry

Pull Rate Limit
No published per-pull rate limit
Storage Price
Included 10 / 100 / 500 GB by tier, then $0.10 per GB-month
Egress Price
Standard Azure egress applies
Vulnerability Scanning
Microsoft Defender for Containers, billed separately

Harbor

Pull Rate Limit
You set it; proxy cache absorbs upstream limits
Storage Price
Your storage, your bill
Egress Price
Your network, your bill
Vulnerability Scanning
Trivy built in, no per-scan charge

Docker Hub

Pull Rate Limit
100 per 6 hours unauthenticated, 200 per 6 hours Personal, unlimited on paid
Storage Price
Personal: 1 private repo. Storage billing indefinitely delayed
Egress Price
Not separately metered
Vulnerability Scanning
Docker Scout: 1 repo Personal, 2 Pro, unlimited Team and Business

GitLab Container Registry

Pull Rate Limit
No published per-pull rate limit
Storage Price
Counts against namespace storage; add-on $5/mo per 10 GiB annually
Egress Price
Not separately published
Vulnerability Scanning
Container scanning in Ultimate

JFrog Artifactory

Pull Rate Limit
No published per-pull rate limit
Storage Price
Consumption-based on storage and transfer; rate card not machine-readable
Egress Price
Consumption-based
Vulnerability Scanning
Xray, sold separately
1

GitHub Container Registry (ghcr.io)

Best Free Option

Best for: Teams already hosting code on GitHub who want a registry with no rate limit to engineer around and, as of September 2026, no storage or bandwidth bill for container images

GitHub Container Registry is the least expensive credible registry here, for a specific and time-limited reason. GitHub's own documentation states that container image storage and bandwidth for the Container registry is currently free, with advance notice promised before that changes. Combined with free public packages and no published pull rate limit, that makes ghcr.io the default for GitHub-hosted projects. Build the assumption that it stays free into your risk register, not your budget.

Pros

  • GitHub documents container registry storage and bandwidth as currently free, with a commitment to give advance notice before changing it
  • Public packages are entirely free and data transferred in is free from any source, on every plan
  • No published per-pull rate limit, so CI pipelines do not need authentication gymnastics or a pull-through cache to avoid throttling
  • Permissions inherit from the repository and organisation, so access control is one system rather than two
  • Anonymous pulls of public images are supported, which matters for open-source distribution

Cons

  • The free container registry position is explicitly described as current, not permanent, which is a real planning risk for a core dependency
  • The wider GitHub Packages quotas that govern other package types are small: 500 MB storage and 1 GB monthly transfer on Free, 2 GB and 10 GB on Pro and Team, 50 GB and 100 GB on Enterprise Cloud
  • No built-in vulnerability scanning for images; you run a scanner in CI or buy one separately
  • Retention is managed through package version cleanup policies rather than a first-class lifecycle rule engine like ECR's
  • Tightly coupled to GitHub identity, so a multi-forge or GitHub-independent estate gets less from it
Honest Weakness: You are building on a price that GitHub describes as current. Container registry storage and bandwidth being free is a commercial decision, not a product guarantee, and the promised advance notice is the only protection. Every other hyperscaler registry here charges roughly $0.10 per GB-month for storage, so the day that changes, a large estate acquires a bill it never modelled. Keep images small and retention tight anyway, and treat portability as a live requirement rather than a theoretical one.

Free Is A Policy, Not A Property

GitHub's documentation says container image storage and bandwidth is currently free and that advance notice will be given before that changes. That is a materially different statement from a free tier with a published quota. It is also the single largest cost difference on this page: ECR, Artifact Registry, and ACR all charge about $0.10 per GB-month for the same bytes. Take the saving, and do not let the absence of a bill justify a registry you cannot leave.

Container registry storage and bandwidth: currently free, per GitHub's documentation, with advance notice promised before any change. Public packages: free. Data transfer in: free from any source. Wider GitHub Packages quotas: Free 500 MB storage and 1 GB transfer per month, Pro 2 GB and 10 GB, Team 2 GB and 10 GB, Enterprise Cloud 50 GB and 100 GB. As published in GitHub's billing and packages documentation, September 2026.

Visit GitHub Container Registry (ghcr.io)
2

Amazon ECR

Best Overall

Best for: Workloads running on ECS, EKS, Lambda, App Runner, or Fargate, where in-region pulls are free and the registry sits inside the same IAM and VPC boundary as everything else

ECR is the right answer if your compute is on AWS, and the reason is egress rather than storage. Pulls from ECR to ECS, EKS, Lambda, App Runner, or Fargate in the same region cost nothing, which removes the line item that makes cross-cloud registries expensive at scale. Storage is $0.10 per GB-month, lifecycle policies are first-class, and its pull-through cache is the cleanest supported way to stop hitting Docker Hub's limits.

Pros

  • Data transfer from ECR to ECS, EKS, Lambda, App Runner, or Fargate in the same region is $0.00 per GB, which is the dominant cost factor at scale
  • Lifecycle policies are a real rule engine with a test mode, so retention is enforced rather than aspirational
  • Pull-through cache rules mirror upstream registries into your private ECR, which is the supported fix for Docker Hub rate limiting in AWS CI
  • Basic scan-on-push is included at no extra charge per repository
  • Public repositories get 50 GB of always-free storage, 500 GB per month of free anonymous data transfer out, and 5 TB per month when the puller uses an AWS account
  • Cross-region and cross-account replication, repository creation templates, and managed image signing are all built in

Cons

  • Private free tier is only 500 MB per month and expires after 12 months, unlike the always-free public allowance
  • Data transfer out to the internet or to another region is charged at standard AWS rates, $0.09 per GB in AWS's own worked example, and is charged on both sides of a cross-region transfer
  • Enhanced scanning is a separate Amazon Inspector charge: $0.09 per initial image scan and $0.01 per rescan, and continuous rescanning of a large repository adds up quickly
  • Pricing is genuinely multi-dimensional (storage, transfer, scanning, signing, replication), which makes a single monthly estimate hard
  • Strong lock-in to AWS identity and networking, which is the flip side of the free in-region pulls
Honest Weakness: ECR's enhanced scanning cost is the surprise on the bill, not its storage. Amazon's own pricing example shows a repository of 1,500 images rescanned 15 times a month producing $225 in rescan charges alone, before any initial scans. Continuous scanning is the right security posture and it is priced per image per rescan, so a large registry with aggressive rescanning can cost more in Inspector charges than in storage. Model the scanning line separately.

Pull-Through Cache Is The Rate Limit Fix

The standard AWS answer to Docker Hub rate limiting is not to buy a Docker subscription, it is to configure an ECR pull-through cache rule for the upstream registry. Your cluster pulls from ECR, ECR periodically refreshes from upstream, and thousands of nodes pulling the same base image generate a handful of upstream requests instead of thousands. Repository creation templates let you pre-set tag immutability, encryption, and lifecycle policy on the repositories ECR creates for you. This is the single highest-value configuration change on this page for anyone running CI on shared IP ranges.

Private repositories: $0.10 per GB-month storage. Free tier: 500 MB/month of private storage for 12 months. Public repositories: 50 GB/month of always-free storage. Data transfer in: $0.00 per GB. Data transfer from ECR to ECS, EKS, Lambda, App Runner, or Fargate in the same region: $0.00 per GB. Data transfer out to internet or another region: standard AWS rates, $0.09 per GB in AWS's published example. Public repository transfer out: 500 GB/month free without an AWS account, 5 TB/month free with one. Basic scan-on-push: included. Amazon Inspector enhanced scanning: $0.09 per initial scan, $0.01 per rescan, with a 15-day free trial for new Inspector accounts. As published on AWS's ECR and Inspector pricing pages, September 2026.

Visit Amazon ECR
3

Google Artifact Registry

Runner Up

Best for: Workloads on GKE, Cloud Run, or Compute Engine, where co-locating the repository with the runtime makes pulls free and one product covers containers plus language packages

Artifact Registry is Google's consolidated replacement for the old Container Registry and it handles containers, Maven, npm, Python, and Go artifacts in one service. Storage is $0.10 per GiB-month after a small free allowance. The cost lever that matters is location: traffic within the same location is free, so co-locating the repository with GKE or Cloud Run is the difference between a trivial bill and a real one. Scanning is a separate Artifact Analysis charge.

Pros

  • Free storage allowance of 0.5 GiB-month, then a flat $0.10 per GiB-month with no tier to choose
  • Data moving within the same location is free, so a correctly co-located repository has effectively no egress cost for in-region pulls
  • One product for container images and language packages (Maven, npm, Python, Go), which removes a separate artifact repository for many teams
  • Remote repositories cache upstream registries and virtual repositories present several backends as one endpoint, which covers both the rate-limit and the consolidation use cases
  • Pricing applies at billing account level, so the free allowance pools across all attached projects

Cons

  • Vulnerability scanning is not included: Artifact Analysis is billed separately, and the rate is not stated on the Artifact Registry pricing page itself
  • Cross-region and intercontinental egress adds up: $0.01 per GiB between US and Canada regions, $0.05 per GiB within Asia, and $0.15 per GiB to or from Oceania
  • The free allowance is tiny at 0.5 GiB-month, which is a rounding error for any real container estate
  • Enabling the Container Scanning API turns on and bills scanning for both Artifact Registry and the legacy Container Registry together, which surprises teams mid-migration
  • Little reason to choose it if your compute is not on Google Cloud, since the location-based free egress is the whole advantage
Honest Weakness: Artifact Registry's cost profile is decided by a configuration choice most teams make without thinking: which region the repository lives in. Get it right and in-location traffic is free. Get it wrong and every pull from a GKE cluster in another region is metered, at $0.01 per GiB within North America and up to $0.15 per GiB for Oceania traffic. There is no warning at creation time, and the resulting bill looks like storage growth rather than a placement mistake.

Co-location Is The Whole Optimisation

Google's own cost guidance leads with it: put repositories in the same region as GKE, Cloud Run, and Compute Engine, because traffic within a location is free. Every other lever on this page, image size, layer reuse, retention, matters less than this one. It is also irreversible in practice, because moving a repository means repointing every deployment manifest. Decide region placement at creation, with the runtime topology in front of you.

Storage: first 0.5 GiB-month free, then $0.10 per GiB-month. Data transfer: free within the same location; $0.01 per GiB between US and Canada regions; $0.05 per GiB between Asian regions; $0.15 per GiB to or from Oceania. Vulnerability scanning: billed separately under Artifact Analysis; the rate is not published on the Artifact Registry pricing page. Pricing applies per billing account, so the free allowance pools across attached projects. As published on Google Cloud's Artifact Registry pricing page, September 2026.

Visit Google Artifact Registry
4

Azure Container Registry

Best Value

Best for: Azure-hosted workloads, particularly AKS, and any team that wants a flat predictable daily registry fee with a large chunk of storage included rather than pure consumption billing

ACR is the only registry here with a genuinely simple pricing model: a fixed daily rate per tier with storage included, then $0.10 per GB-month above it. Basic is about $5 a month with 10 GB, Standard about $20 with 100 GB, Premium about $50 with 500 GB. That predictability is its real advantage. The catch is that the features enterprises assume are standard, geo-replication and connected registries, are Premium-only and each replica costs another Premium unit.

Pros

  • Genuinely predictable pricing: a fixed daily registry unit rate plus included storage, rather than metering every dimension
  • Included storage is generous relative to the fee: 10 GB on Basic, 100 GB on Standard, 500 GB on Premium
  • Overage is a flat $0.10 per GB-month at every tier, so exceeding the included amount is not a cliff
  • Premium adds geo-replication and connected registries, which handle multi-region and edge or disconnected scenarios properly
  • ACR Tasks builds images in the registry, billed per CPU second, with a free allowance before charges begin

Cons

  • Geo-replication is Premium-only and each replica is billed as an additional Premium registry replication unit at the same daily rate as the registry itself
  • Webhook limits are tight on the lower tiers: 2 on Basic and 10 on Standard, against 500 on Premium
  • Vulnerability scanning is not included; it comes from Microsoft Defender for Containers as a separate purchase
  • Connected registry, used for edge and disconnected deployments, is a further per-day charge on top of Premium
  • Prices vary by region and currency and are only shown through the Azure calculator, so a quoted figure is always region-specific
Honest Weakness: ACR's clean tier pricing hides its real cost, which is replication. A Premium registry in one region is roughly $50 a month. The same registry replicated to three regions is that base unit plus three replication units at the same daily rate, so the predictable $50 becomes roughly $200 before any storage overage. Multi-region is also the only reason most enterprises need Premium in the first place, so the tier that solves the problem is the tier that multiplies the price.

Predictable Until You Replicate

Every other cloud registry here is pure consumption billing, which means a quiet month costs almost nothing and a busy one is a surprise. ACR inverts that: you pay a fixed daily rate whether you push once or a thousand times. For a steady-state production registry that is the easier number to defend in a budget. Just model replication explicitly, because each geo-replicated region is charged as another Premium unit and that is where the simple number stops being simple.

US East, USD, from Azure's retail price list, September 2026. Basic: $0.1666 per day (about $5/month), 10 GB included, 2 webhooks. Standard: $0.6666 per day (about $20/month), 100 GB included, 10 webhooks. Premium: $1.6666 per day (about $50/month), 500 GB included, 500 webhooks, geo-replication and connected registry support. Storage above the included amount: $0.10 per GB-month at every tier. Premium geo-replication: $1.6666 per day per replication unit, plus $0.10 per GB-month for replicated stored data. Connected registry: $0.33333 per day, Premium only. ACR Tasks: $0.0001 per vCPU-second after a free allowance. Prices vary by region and currency.

Visit Azure Container Registry
5

Harbor

Best Open Source

Best for: Organisations that need a registry inside their own network, air-gapped or regulated environments, and any team wanting a proxy cache to eliminate upstream pull rate limits permanently

Harbor is the only self-hosted option here and the strongest answer to the rate-limit problem, because its proxy cache lets a whole cluster pull through Harbor while Harbor makes a handful of upstream requests. It is a CNCF Graduated project, graduating on 15 June 2020 as the eleventh project to do so, with Trivy scanning, RBAC, replication, and retention policies built in and no per-scan charge. The cost is not zero, it is a service you now run.

Pros

  • CNCF Graduated since 15 June 2020, with open governance rather than a single vendor's roadmap
  • Trivy vulnerability scanning is built in with no per-image or per-scan charge, which is a real saving against Inspector's $0.09 plus $0.01 per rescan model
  • Proxy cache absorbs upstream rate limits permanently, so Docker Hub's 100 or 200 pulls per 6 hours stops being an operational concern
  • Tag retention policies, immutability rules, replication between registries, and project-level RBAC are all first-class
  • Runs entirely inside your network, which is the only workable answer for air-gapped and some regulated environments
  • Supports OCI artifacts and Helm charts, not just container images

Cons

  • You operate it: Harbor's own prerequisites are 2 CPU, 4 GB RAM, and 40 GB disk minimum, with 4 CPU, 8 GB, and 160 GB recommended, before any image storage
  • It is a multi-component system (PostgreSQL, Redis, the Distribution registry, the Harbor core) and each component is your responsibility to patch and back up
  • High availability, certificate management, and storage backend configuration are all design work you must do before production
  • Upgrades require care because the database schema changes between minor versions
  • No vendor to call, so the standing cost is the engineer who knows how it works and the documentation they leave behind
Honest Weakness: Harbor's cost is not the licence, it is the on-call rotation. You are adding a stateful service with a Postgres database, a Redis instance, and a storage backend to the list of things that can page someone at 3am. A registry outage stops every deployment and every autoscaling event across the estate. The recommended footprint alone is 4 CPU, 8 GB RAM, and 160 GB disk before images. Budget the operational burden honestly, because a self-hosted registry that nobody maintains is worse than the rate limit it was meant to avoid.

Proxy Cache Ends The Rate Limit Conversation

Harbor's proxy cache projects pull from an upstream registry on demand and serve from local storage afterwards. A 200-node cluster rolling a deployment generates one upstream pull rather than 200, which takes Docker Hub's unauthenticated limit of 100 pulls per 6 hours per IPv4 address or IPv6 /64 subnet off the table entirely. That is the same architectural fix ECR pull-through cache rules and Artifact Registry remote repositories provide, available without a cloud dependency, and it is the most common reason teams stand Harbor up in the first place.

Free, open source, CNCF Graduated project. Real cost is infrastructure plus operations. Harbor's documented prerequisites are a minimum of 2 CPU, 4 GB RAM, and 40 GB disk, with 4 CPU, 8 GB RAM, and 160 GB disk recommended, plus storage for the images themselves, a PostgreSQL database, and a Redis instance. Add backup, HA design, certificate management, and upgrade capacity. As documented in Harbor's installation prerequisites, September 2026.

Visit Harbor
6

Docker Hub

Honorable Mention

Best for: Publishing and distributing public images to the widest possible audience, and for Docker Official and Verified Publisher images that everyone else's base layers depend on

Docker Hub is where images are published and increasingly not where they are pulled from in production, and its rate limits are why. The verified current limits are per 6 hours: 100 for unauthenticated users per IPv4 address or IPv6 /64 subnet, 200 for authenticated Personal accounts, and unlimited on Pro, Team, and Business. The widely repeated hourly limits announced for 1 April 2025 were never enforced, and Docker cancelled the planned pull consumption charges outright.

Pros

  • The default registry for the entire ecosystem, so Docker Official Images and Verified Publisher images are here first and everywhere else second
  • Authenticated Pro, Team, and Business subscribers get an unlimited pull rate, subject to fair use, which resolves the limit entirely for paying customers
  • Docker cancelled the planned image pull consumption fees and did not enforce the stricter hourly limits scheduled for 1 April 2025
  • Storage-based billing is indefinitely delayed, with Docker committing to at least six months notice before introducing it
  • Docker Scout provides health scores, local vulnerability analysis, and remediation guidance, included at some level on every plan
  • Pull rate headers are exposed on the registry API, so you can measure your own consumption before it bites

Cons

  • Unauthenticated pulls are limited to 100 per 6 hours per IPv4 address or IPv6 /64 subnet, which is a shared pool on any NAT, CI runner fleet, or corporate network
  • Personal accounts get only 200 pulls per 6 hours and 1 private repository
  • Docker's own pricing page and its documentation disagree: the pricing page shows 100 pulls per hour for Personal, while the documentation specifies 200 per 6 hours, so the authoritative figure is the documented one
  • A multi-architecture image counts as one pull per architecture pulled, which silently doubles consumption for teams building for amd64 and arm64
  • Third-party CI platforms often share IP ranges, so an authenticated pull can still hit abuse rate limiting attributed to the shared address
  • Docker Scout is limited to 1 repository on Personal and 2 on Pro, so scanning at any scale needs Team or Business
Honest Weakness: The single most consequential fact about Docker Hub is one most comparisons get wrong. The hourly limits announced for April 2025 (10 pulls an hour unauthenticated, 100 for free accounts) were never enforced, and articles repeating them are describing a policy that does not exist. The real limits are 100 and 200 per 6 hours. That is better news than the internet believes, and it is still not enough for a CI fleet behind shared NAT, which is why the correct architecture is a pull-through cache rather than a subscription.

What Actually Happened With The 2025 Rate Limits

Docker announced new limits for 1 April 2025: 10 pulls per hour unauthenticated and 100 per hour for authenticated free accounts, plus image pull consumption fees and storage-based billing. On 8 April 2025 Docker confirmed it had not enforced the rate limit changes and had cancelled the pull consumption charges entirely, with storage billing delayed indefinitely. The limits that remain are the ones from the 2020 policy: 100 pulls per 6 hours unauthenticated and 200 for Personal accounts. A large amount of published advice still describes the withdrawn hourly policy as though it took effect.

The Multi-Arch And Shared IP Traps

Two details decide whether you hit the limit sooner than your pull count suggests. A pull of a multi-architecture image counts as one pull per architecture, so a build matrix covering amd64 and arm64 consumes double. And when pulling through a third-party CI platform, that platform may use one IPv4 address or IPv6 /64 subnet for many customers, so pulls attributed to that shared address can trigger abuse rate limiting even for authenticated users. Docker lists Artifactory, AWS CodeBuild, ECS and Fargate, Azure Pipelines, CircleCI, Codefresh, Drone.io, GitLab, and TeamCity among the platforms where this applies.

Pull rate limits per 6 hours: unauthenticated 100 per IPv4 address or IPv6 /64 subnet; Personal (authenticated) 200; Pro, Team, and Business unlimited, subject to fair use. Subscriptions: Personal $0 with 1 private repository and 1 Docker Scout-enabled repository; Pro $11/month monthly or $9 annual; Team $16/month monthly or $15 annual, up to 100 users; Business $24/month, unlimited users. Image pull consumption fees were cancelled; storage-based billing is indefinitely delayed with a commitment to at least six months notice. As published on Docker's pricing page and pull usage documentation, September 2026.

Visit Docker Hub
7

GitLab Container Registry

Runner Up

Best for: Teams whose source, CI, and deployment already run on GitLab and who want images in the same permission model and the same bill, particularly self-managed GitLab installations

GitLab's registry is a reasonable default for GitLab shops and a poor reason to move to GitLab. Its genuine strength is coherence: images inherit project permissions, CI pushes without extra credentials, and a self-managed GitLab gives you a registry inside your own network with no separate product to run. Its weakness is documentation: GitLab does not publish container registry specific storage quotas or pull rate limits, so the cost model is harder to pin down than any cloud registry here.

Pros

  • Images inherit project and group permissions, so there is no second access control system to keep in sync
  • GitLab CI pushes and pulls without configuring separate registry credentials, which removes a common source of pipeline breakage
  • Self-managed GitLab includes the registry, so a private in-network registry comes with a product the organisation already runs
  • Cleanup policies for tags are configurable per project, so retention is enforceable
  • Container scanning is available in the Ultimate tier as part of the same pipeline rather than a separate tool

Cons

  • GitLab's documentation publishes no container registry specific storage quota and no pull rate limit, which makes cost and capacity planning harder than on any cloud registry here
  • Registry storage counts against namespace storage, and additional storage is an add-on at $5 per month per 10 GiB billed annually on Premium and Ultimate
  • Container scanning requires Ultimate, whose price is not published at all
  • Premium is $29 per user per month billed annually, so if you are not already a GitLab customer the registry is an expensive way in
  • Little advantage for teams whose source lives elsewhere, since the integration is the whole value
Honest Weakness: The cost model is the problem. GitLab does not publish registry-specific storage quotas or pull rate limits in its documentation. You cannot forecast what a large image estate will cost, or whether a busy CI fleet will be throttled, and the answer differs between GitLab.com and self-managed. Every cloud registry here publishes a per-GB number you can multiply. GitLab's registry is priced through namespace storage and a $5 per 10 GiB add-on, which is workable but requires a support conversation to model accurately.

Coherence Is The Feature

The argument for GitLab's registry is not that it is the best registry, it is that it is one fewer system. Permissions, CI credentials, cleanup policies, and scanning all live in the same product as the source code, which removes a whole category of integration work and a whole category of access-control drift. For a self-managed GitLab installation it also removes the need to run Harbor separately. That is a real benefit, and it is only a benefit if GitLab is already where your code lives.

Included with GitLab. Free: $0. Premium: $29 per user per month billed annually. Ultimate: custom, required for container scanning. GitLab.com applies a 10 GB repository size limit and namespace storage limits; additional storage is $5 per month per 10 GiB billed annually on Premium and Ultimate. GitLab's documentation does not publish container registry specific storage quotas or pull rate limits. As published on GitLab's pricing page and GitLab.com settings documentation, September 2026.

Visit GitLab Container Registry
8

JFrog Artifactory

Best for Enterprise

Best for: Large enterprises that need one system of record for container images plus Maven, npm, PyPI, NuGet, Go, and Debian artifacts, with binary-level supply chain governance across all of them

Artifactory is the enterprise answer to a problem the other seven do not solve: a single governed repository for every artifact type, not just container images, with replication, access control, and supply chain policy applied uniformly. That is genuinely valuable in a large estate. It is ranked last here because it is the only vendor whose pricing could not be read from its own pages this session, and because buying it purely as a container registry is heavily over-specified.

Pros

  • One repository for container images and essentially every language package format, which is the real reason large organisations buy it
  • Remote repositories proxy and cache upstream registries, solving Docker Hub rate limiting the same way Harbor's proxy cache does
  • Replication, access control, and retention policies apply uniformly across all artifact types rather than per tool
  • JFrog Xray adds binary-level vulnerability and licence compliance scanning across every repository type, sold separately
  • Available both as a cloud subscription and self-managed, including air-gapped deployments

Cons

  • Pricing could not be read from JFrog's own pages this session: the pricing and buy-now pages returned bot challenges or empty content to automated fetching, so no number here is sourced to a JFrog page
  • Consumption-based model across storage and data transfer, with tiered discounts by storage volume, which is harder to forecast than a flat per-GB rate
  • Xray and Advanced Security are separate line items, so the security posture most buyers want is not in the base price
  • Substantially over-specified if the requirement is container images alone: the other seven options here are cheaper and simpler for that job
  • Self-managed deployment carries an operational burden comparable to Harbor, without Harbor's zero licence cost
Honest Weakness: JFrog is the only entry on this page where the price is not verifiable from the vendor's own site by ordinary means, and that matters in a comparison whose entire premise is verified pricing. JFrog does publish self-serve tiers and a consumption model based on storage and transfer, but those pages were not readable this session. Anyone budgeting should get a written quote rather than trusting a figure circulating in comparison articles, including the widely repeated entry-level number.

Buy It For The Other Artifacts

If the shortlist is genuinely about container images, Artifactory is not the answer, and the seven options above are cheaper, simpler, or both. Artifactory earns its price when the organisation has Maven, npm, PyPI, NuGet, Go modules, Debian packages, and Helm charts scattered across five systems with five access models and no consistent retention or licence policy. Consolidating that is a supply chain governance project, and the container registry is a small part of it.

Not verified from a JFrog-owned page this session. JFrog's pricing page describes a consumption-based model across storage and data transfer with tiered discounts by storage volume, and JFrog offers self-serve Pro and Enterprise X and Enterprise+ tiers plus a free trial. The pricing and buy-now pages returned bot challenges or empty content to automated fetching in September 2026, so no figure is quoted here. Request a written quote. Xray and Advanced Security are priced separately from the base subscription.

Visit JFrog Artifactory

Which One Should You Pick?

Use CaseOur Recommendation
CI keeps failing with Docker Hub toomanyrequests errorsPut a cache in front of it rather than buying a subscription. ECR pull-through cache rules on AWS, Artifact Registry remote repositories on Google Cloud, or a Harbor proxy cache project anywhere. The limits are 100 pulls per 6 hours unauthenticated per IPv4 address or IPv6 /64 subnet and 200 for Personal accounts, and a shared CI IP range exhausts either quickly regardless of who pays.
Everything runs on GitHub and the budget for a registry is zeroGitHub Container Registry. GitHub documents container registry storage and bandwidth as currently free with advance notice promised before any change, public packages are free, and there is no published pull rate limit. Keep retention tight anyway, because currently is not permanently.
Production runs on EKS or ECS and the egress bill is the concernAmazon ECR. Transfer from ECR to ECS, EKS, Lambda, App Runner, or Fargate in the same region is $0.00 per GB, storage is $0.10 per GB-month, and lifecycle policies enforce retention properly. Model Inspector enhanced scanning separately at $0.09 per initial scan and $0.01 per rescan.
You need a registry inside your own network, air-gapped or under a regulatorHarbor. CNCF Graduated, Trivy scanning built in with no per-scan charge, tag retention, immutability, replication, and proxy cache. Budget the operational reality: 4 CPU, 8 GB RAM, and 160 GB disk recommended before images, plus Postgres, Redis, backups, and an on-call owner.
Finance wants a predictable monthly registry number rather than consumption billingAzure Container Registry. Basic is about $5 a month with 10 GB included, Standard about $20 with 100 GB, Premium about $50 with 500 GB, and overage is a flat $0.10 per GB-month. Model geo-replication explicitly, because each replicated region is billed as another Premium unit.
Container images are only part of the problem; Maven, npm, and PyPI artifacts are scattered everywhereJFrog Artifactory. It is the only option here that governs every artifact type under one access model, retention policy, and replication scheme. Get a written quote, because JFrog's published pricing was not readable from its own site this session.
You want vulnerability scanning included rather than billed per imageHarbor, which ships Trivy with no per-scan charge. Everywhere else scanning is a separate meter. Inspector on AWS at $0.09 plus $0.01 per rescan, Artifact Analysis on Google Cloud, Microsoft Defender for Containers on Azure, Docker Scout limited to 1 or 2 repositories below the Team plan, and GitLab container scanning gated to Ultimate.

How we evaluated

Container registries look interchangeable and are not, because the same image estate can cost nothing or thousands depending on four variables that rarely appear in a feature matrix. This comparison is built around those four.

Each registry was assessed on the criteria in the comparison table above:

  • Pull rate limit: the documented limit, its counting window, and what it is counted against (user, account, or IP range). This is the constraint that breaks CI.
  • Storage price: the per-GB or per-GiB monthly rate and the real free allowance, including whether the allowance expires.
  • Egress price: what a pull costs, split between in-region pulls to your own compute and everything else. This, not storage, is the dominant cost at scale.
  • Vulnerability scanning: whether scanning is included or a separate meter, and what a rescan costs. Continuous scanning of a large registry can exceed its storage bill.
  • Retention: whether the product has a real lifecycle policy engine, because without one every other number grows without limit.

Open-source options are costed as operational burden rather than as zero. Harbor's entry states its documented hardware prerequisites and its component list, because a self-hosted registry is a stateful service that stops every deployment when it breaks.

What we verified, and when

Last verified: September 2026. Every figure was read from a primary source this month:

  • Docker Hub pull usage and limits for the 6-hour rate limits by account type, the multi-architecture pull rule, the version-check exemption, and the shared-IP abuse rate limiting note. Docker's pricing page for subscription prices and Docker Scout repository allowances, and Docker's April 2025 policy post for the confirmation that the 1 April 2025 limits were not enforced and pull consumption fees were cancelled.
  • GitHub's Packages billing documentation for the per-plan storage and transfer quotas, the free status of public packages, and the statement that container registry storage and bandwidth is currently free.
  • Amazon ECR pricing for the $0.10 per GB-month rate, the 500 MB 12-month private free tier, and the 50 GB always-free public allowance. The same page gives the $0.00 in-region transfer to ECS, EKS, Lambda, App Runner, and Fargate, and the $0.09 per GB figure in AWS's own worked example. Amazon Inspector pricing for the $0.09 initial scan and $0.01 rescan rates and the $225 rescan example.
  • Google Artifact Registry pricing for the 0.5 GiB-month free allowance, the $0.10 per GiB-month rate, the free same-location transfer, the cross-region rates, and the statement that vulnerability scanning is billed separately under Artifact Analysis.
  • The Azure Retail Prices API for Container Registry in US East, USD. It gives Basic at $0.1666 per day, Standard at $0.6666, Premium at $1.6666, replication units at $1.6666 per day, connected registry at $0.33333 per day, and $0.10 per GB-month stored data across all tiers. Included storage and webhook counts by tier come from the Azure Container Registry pricing page.
  • Harbor's installation prerequisites for the minimum (2 CPU, 4 GB, 40 GB) and recommended (4 CPU, 8 GB, 160 GB) hardware, and CNCF's Harbor project page for the graduation date of 15 June 2020.
  • GitLab pricing for the $29 per user per month Premium rate and the $5 per 10 GiB storage add-on. GitLab.com settings documentation for the repository size limit and the absence of published container registry quotas or pull rate limits.

What we could not verify

JFrog. Its pricing and buy-now pages returned bot challenges or empty content to automated fetching this session, so no JFrog price is quoted anywhere on this page. Its entry describes the consumption model its pricing page states and recommends a written quote. Figures circulating in comparison articles were deliberately not carried across.

Google Artifact Analysis per-scan rate. The Artifact Registry pricing page confirms scanning is billed separately but does not state the rate, and the Artifact Analysis pricing page was not machine-readable this session. The entry says scanning is a separate charge rather than guessing a number.

Docker's own internal inconsistency. Docker's pricing page shows 100 pulls per hour for Personal accounts while its documentation specifies 200 per 6 hours. The documented figure is treated as authoritative here and the discrepancy is reported rather than silently resolved.

GitLab container registry quotas. GitLab publishes no registry-specific storage quota or pull rate limit, and the answer differs between GitLab.com and self-managed. That gap is reported as a finding in the entry.

Note

Editorial independence: this is a vendor-neutral comparison with no paid placements, sponsorships, or affiliate links. Rankings reflect fit for the stated use cases, not commercial relationships. No registry here was tested hands-on; the evaluation rests on vendor documentation, published pricing, cloud retail price APIs, and CNCF project records, all cited above.

Frequently Asked Questions

What are Docker Hub's pull rate limits in 2026?
Per 6 hours: 100 pulls for unauthenticated users, counted per IPv4 address or IPv6 /64 subnet; 200 pulls for authenticated Docker Personal accounts; and an unlimited pull rate for authenticated Pro, Team, and Business subscribers, subject to fair use. This is the most misreported fact in the category. Docker announced stricter hourly limits for 1 April 2025, at 10 pulls an hour unauthenticated and 100 an hour for free accounts. On 8 April 2025 it confirmed it had not enforced them, and cancelled the planned image pull consumption fees entirely. A great deal of published advice still describes the withdrawn policy as current.
Which container registry is actually free?
GitHub Container Registry is the closest thing to genuinely free: GitHub's documentation states container image storage and bandwidth is currently free, with advance notice promised before any change, and public packages are free on every plan. Harbor is free as software but costs infrastructure and operations, with recommended prerequisites of 4 CPU, 8 GB RAM, and 160 GB disk before images. Amazon ECR gives 500 MB of private storage a month for 12 months and 50 GB of always-free public storage. Google Artifact Registry's free allowance is 0.5 GiB-month. Docker Hub Personal is free but limited to 1 private repository and 200 pulls per 6 hours.
How do I stop hitting container registry rate limits without paying for a subscription?
Cache upstream images in a registry you control. On AWS that is an ECR pull-through cache rule, on Google Cloud a remote repository in Artifact Registry, and anywhere else a Harbor proxy cache project. Your nodes pull from the local registry, the local registry refreshes from upstream occasionally, and a 200-node rollout generates one upstream pull instead of 200. This also fixes the shared-IP problem, where a third-party CI platform uses one address range for many customers and triggers abuse rate limiting even for authenticated pulls.
What does container image storage actually cost across the clouds?
The headline rate has converged. Amazon ECR is $0.10 per GB-month for private repositories. Google Artifact Registry is $0.10 per GiB-month after the first 0.5 GiB. Azure Container Registry charges $0.10 per GB-month above the storage included in its tier, which is 10 GB on Basic, 100 GB on Standard, and 500 GB on Premium. Storage is rarely the expensive part. Egress and scanning are. In-region pulls to your own compute are free on all three, so the bill is decided by whether the registry sits in the same region as the runtime and how aggressively you rescan images.
Is vulnerability scanning included with a container registry?
Usually not, and this is the line item that surprises people. Harbor includes Trivy with no per-scan charge. Amazon ECR includes basic scan-on-push, but enhanced scanning is Amazon Inspector at $0.09 per initial scan and $0.01 per rescan, and AWS's own example shows 1,500 images rescanned 15 times a month costing $225 in rescans alone. Google Artifact Registry bills Artifact Analysis separately. Azure uses Microsoft Defender for Containers. Docker Scout is limited to 1 repository on Personal and 2 on Pro. GitLab container scanning requires Ultimate. GitHub Container Registry has no built-in scanner.
How should we handle retention and image cleanup?
Treat it as a policy engine question, because that is where these products genuinely differ. Amazon ECR lifecycle policies are rules with a test mode, so you can verify what a rule would delete before applying it. Harbor has tag retention policies plus immutability rules, which is the strongest combination here. Azure and Google Artifact Registry both support cleanup policies. GitLab has per-project cleanup policies for tags. GitHub handles it through package version cleanup rather than a dedicated lifecycle engine. Without retention, storage grows monotonically and every scanning meter you have grows with it.
Should we self-host a registry or use a managed one?
Self-host when you need an air-gapped or in-network registry, when a proxy cache is the architecture you want anyway, or when per-scan scanning charges at your image volume exceed the cost of running Harbor. Use a managed registry when your compute is in one cloud, because in-region pulls to your own runtime are free and that removes the dominant cost. The honest framing of Harbor is not free versus paid. It is a stateful service with Postgres and Redis, recommended at 4 CPU and 8 GB RAM before storage, that pages someone when it breaks, and a registry outage stops every deployment and every autoscaling event you have.
Does a multi-architecture image count as one pull or several?
Several. Docker's documentation is explicit: a pull of a normal image counts as one pull for a single manifest, while a pull of a multi-architecture image counts as one pull for each different architecture pulled. A build matrix covering amd64 and arm64 therefore consumes its rate limit twice as fast as the pull count suggests. Version checks, where a client verifies an image or tag exists without downloading it, do not count toward usage pricing.

About the author

is the founder and creator of LoginRadius, a customer identity platform he built and scaled to over a billion users. He is now the founder of GrackerAI, a GEO platform for B2B SaaS and cybersecurity teams, and has spent more than 15 years building identity and security products.

Related Comparisons