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.
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.
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
| Registry | Pull Rate Limit | Storage Price | Egress Price | Vulnerability Scanning |
|---|---|---|---|---|
| GitHub Container Registry | No published per-pull rate limit | Container registry storage currently free; public packages free | Container registry bandwidth currently free | Not built in; use a scanner in CI |
| Amazon ECR | No 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 internet | Basic scan-on-push included; Inspector enhanced $0.09 first scan, $0.01 per rescan |
| Google Artifact Registry | No published per-pull rate limit | $0.10 per GiB-month; first 0.5 GiB-month free | Free within the same location; $0.01 per GiB US to US cross-region | Artifact Analysis billed separately, rate not published on the pricing page |
| Azure Container Registry | No published per-pull rate limit | Included 10 / 100 / 500 GB by tier, then $0.10 per GB-month | Standard Azure egress applies | Microsoft Defender for Containers, billed separately |
| Harbor | You set it; proxy cache absorbs upstream limits | Your storage, your bill | Your network, your bill | Trivy built in, no per-scan charge |
| Docker Hub | 100 per 6 hours unauthenticated, 200 per 6 hours Personal, unlimited on paid | Personal: 1 private repo. Storage billing indefinitely delayed | Not separately metered | Docker Scout: 1 repo Personal, 2 Pro, unlimited Team and Business |
| GitLab Container Registry | No published per-pull rate limit | Counts against namespace storage; add-on $5/mo per 10 GiB annually | Not separately published | Container scanning in Ultimate |
| JFrog Artifactory | No published per-pull rate limit | Consumption-based on storage and transfer; rate card not machine-readable | Consumption-based | Xray, 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
GitHub Container Registry (ghcr.io)
Best Free OptionBest 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
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.
Amazon ECR
Best OverallBest 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
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.
Google Artifact Registry
Runner UpBest 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
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.
Azure Container Registry
Best ValueBest 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
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.
Harbor
Best Open SourceBest 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
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.
Docker Hub
Honorable MentionBest 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
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.
GitLab Container Registry
Runner UpBest 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
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.
JFrog Artifactory
Best for EnterpriseBest 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
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.
Which One Should You Pick?
| Use Case | Our Recommendation |
|---|---|
| CI keeps failing with Docker Hub toomanyrequests errors | Put 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 zero | GitHub 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 concern | Amazon 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 regulator | Harbor. 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 billing | Azure 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 everywhere | JFrog 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 image | Harbor, 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.
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?
Which container registry is actually free?
How do I stop hitting container registry rate limits without paying for a subscription?
What does container image storage actually cost across the clouds?
Is vulnerability scanning included with a container registry?
How should we handle retention and image cleanup?
Should we self-host a registry or use a managed one?
Does a multi-architecture image count as one pull or several?
Related Comparisons
Incident Response
Top 6 Incident Management and On-Call Platforms for 2026: incident.io vs PagerDuty vs Rootly vs Grafana IRM vs Better Stack vs FireHydrant
6 tools compared
Platform Engineering
Top 6 Internal Developer Portals for 2026: Backstage vs Port vs Cortex vs OpsLevel vs Spotify Portal vs Humanitec
6 tools compared
Workflow Orchestration
Top 6 Workflow Orchestration Platforms for 2026: Temporal vs Airflow vs Prefect vs Dagster vs Kestra vs Windmill
6 tools compared
Backend Platform
Top 7 Supabase Alternatives for Startups (2026)
7 tools compared