Best European Alternatives to Docker Hub
Looking for a European alternative to Docker Hub? European container registries offer image storage with GDPR compliance and EU data residency.
How we rank these tools — 4-step process
-
1
European ownership, verified
The company is headquartered and incorporated in the EU, EEA or Switzerland, and processes customer data in Europe. A US parent company disqualifies a tool from this page regardless of where its servers are.
-
2
Category fit and hands-on review
What the tool actually does, who it suits, and where it falls short — checked against the vendor’s own documentation, changelog and pricing page rather than its marketing copy.
-
3
Compliance and pricing check
GDPR posture, hosting location and the prices quoted on this page are verified against the vendor’s public pricing before publication, and re-checked when we revisit the category.
-
4
Position on this page
Placement on this page can be paid, and that can affect which tools appear here and the order they appear in. It never buys a good review: a tool that fails the checks above is not here at any price, and payment does not change the shortcomings we write about. A vendor can ask us to correct a factual error — not to remove a criticism.
Vendors can pay for visibility on this page. It never changes what an entry says about a product, including the criticism, and we earn nothing when you click through to a vendor. Paid placement can affect which tools appear here and the order they appear in. Editorial policy
Best European Alternatives to Docker Hub
Privacy-focused container registries with EU data storage.
GitLab
DevOps platform with built-in container registry and CI/CD
Scaleway
French cloud with managed container registry and Kubernetes
Codeberg
Community-driven code hosting with container packages support
OVHcloud
European cloud with managed private container registry
Key takeaways
- Anonymous pulls are limited to 100 per six hours per IPv4 address or IPv6 /64 subnet, so an entire CI cluster behind one gateway shares a single allowance.
- Docker's documentation and its pricing table state different free-tier limits — 200 per six hours against 100 per hour — which is itself the argument for owning the registry.
- There is no EU region for Docker Hub; Docker's privacy policy places the services in the United States and relies on the Data Privacy Framework for transfers.
- Moving your own images does not remove the dependency: a pull-through cache for upstream base images is the part that fixes builds.
- OVHcloud's registry is Harbor with the traffic included in the plan, which is the closest thing here to a Docker Hub replacement with a bill you can predict.
Why people leave Docker Hub
Docker Hub is rarely a choice anybody made. It is where the base image lives, so it is where every build goes, and it stays that way until a pipeline starts failing with a message about a rate limit.
That is the usual trigger. Anonymous pulls are capped at 100 per six hours, counted per IPv4 address or IPv6 /64 subnet, and a free Docker Personal account gets 200 per six hours.
A build farm behind one NAT gateway is a single address as far as the counter is concerned, so a dozen developers and a busy CI queue share one bucket. Paid plans are described as unlimited subject to fair use, and the documentation warns that excessive transfer, pull rates or storage can lead to throttling or additional charges — unlimited, then, but not a number.
The jurisdiction question sits underneath it and is unusually plain here. Docker, Inc. operates from Palo Alto, its privacy policy states that Docker and its services are based and provided primarily in the US, and transfers out of the EEA run on the EU-U.S. Data Privacy Framework and standard contractual clauses. There is no European region of Docker Hub to select, so unlike a forge, this is not a configuration question.
- The meter counts your address, not your team Rate limits on anonymous pulls apply per IPv4 address or IPv6 /64 subnet, which is exactly the wrong unit for modern infrastructure. Every runner in a Kubernetes cluster behind one egress address draws from the same 100 pulls per six hours, and a multi-architecture image counts once per architecture pulled. Authenticating helps, paying helps more, and neither changes the fact that your build reliability depends on somebody else's counter.
- Docker cannot even agree with itself about the free tier The documentation says a free Docker Personal account gets 200 pulls per six hours; the pricing table for the same plan says 100 pulls per hour. Both pages are current, both are Docker's. When you are sizing a build pipeline, the gap between those two numbers is the difference between a green pipeline and a red one, and the fix is not to pick the friendlier figure — it is to stop depending on the figure.
- There is no European Docker Hub to switch on Several American vendors answer the sovereignty question with a region selector. Docker does not: the privacy policy puts the services in the United States and leans on the Data Privacy Framework and standard contractual clauses for transfers, and there is no residency add-on to buy. For a regulated buyer that simplifies the decision, because the only way to keep images in Europe is to keep them somewhere else.
- "Unlimited, fair use" is a policy, not a quota Paid plans remove the pull counter and replace it with a judgement. The usage documentation reserves the right to throttle or charge for excessive data transfer, pull rates or storage without publishing where excessive begins. That is defensible for a free service funded by paid ones, and it is a poor foundation for a release process you are contractually obliged to run at two in the morning.
What you have to replace, not just match
Docker Hub does three jobs and they detach cleanly, which is why this migration is usually easier than a forge migration and more often done badly.
The first is the private registry: your own images, pushed by CI and pulled by your servers. That moves to any of the options below in an afternoon, because the registry API is a standard and the only real work is credentials. The second is public distribution: the images you publish for other people, where Docker Hub's value is the audience and the fact that docker pull works with no configuration.
The third is the one teams forget. Every Dockerfile that begins with a bare image name is still pulling from Docker Hub after the migration, so your build depends on it whatever you did with your own images. The fix is a pull-through cache or a mirror of the upstream images you actually use, held in the registry you now control. Do that first and the rate limit stops mattering the same week.
The alternatives compared
| Position | Tool | Headquarters | Pricing | Jurisdiction |
|---|---|---|---|---|
| #1 | GitLab | Rotterdam, Netherlands | Free tier / Premium $29 per user per month / Ultimate $99 per user per month | EU (Netherlands) |
| #2 | Scaleway | Paris, France | From about €0.0025/hour (DEV1-S) | EU (France) |
| #3 | Codeberg | Berlin, Germany | Free | EU (Germany) |
| #4 | OVHcloud | Roubaix, France | From about €3.50/month (VPS) | EU (France) |
How each alternative compares to Docker Hub
- Which law reaches it. EU (Netherlands). Docker Hub is run from the United States, so the CLOUD Act obliges the provider to hand over data on a valid order regardless of which country the servers are in.
- Where the data sits. Self-hosted anywhere, or SaaS with EU data residency options.
- Source code. Open source, where Docker Hub is not: you can read what it does rather than take the description on trust.
- Independently checked. GDPR.
Best for: Teams whose images are built by a pipeline and never distributed to strangers
GitLab's container registry is included with every project on every tier — Free, Premium and Ultimate — on GitLab.com, on self-managed installations and on Dedicated, and it speaks Docker V2 and OCI. The practical benefit against Docker Hub is authentication: the CI job that builds an image already holds a token that can push it, so there is no second account, no shared password in a secret store and no separate registry to keep in step with the repository.
Traceability is the other gain. A tag sits inside the project that produced it, next to the commit, the pipeline log and the merge request, which is exactly the chain of custody that a Docker Hub organisation cannot give you because it knows nothing about your source.
Two honest limits. GitLab Inc. operates from San Francisco, so the hosted service does not answer the jurisdiction objection that Docker Hub raises — only a self-managed or Dedicated instance in a region you chose does. And a forge registry is not a distribution channel: it has no audience, no discovery and none of the reasons people publish to Docker Hub in the first place.
What GitLab does better than Docker Hub
- The pipeline pushes with a job token, where Docker Hub needs a separate account and a long-lived credential
- Available on every tier including Free, rather than being the thing a paid plan unlocks
- Self-managed and Dedicated installations put the registry in a region you picked, which Docker Hub does not offer at all
- Images are addressable inside the project that built them, so provenance is the default rather than a convention
- No pull counter tied to your egress IP address
Where GitLab is a step down from Docker Hub
- GitLab Inc. is American, so the SaaS version does not change the jurisdiction of the supplier
- No public audience: nobody discovers an image because it is on your GitLab
- On GitLab.com the registry consumes namespace storage, which becomes the new limit to watch
- Not a substitute for a dedicated registry when a cluster pulls hundreds of tags a day
Standout against Docker Hub. The credential problem disappears: the job that builds the image is already allowed to push it, which is the part of Docker Hub every team hand-rolls.
- Which law reaches it. EU (France). Docker Hub is run from the United States, so the CLOUD Act obliges the provider to hand over data on a valid order regardless of which country the servers are in.
- Where the data sits. Paris, Amsterdam, Warsaw — EU only.
- Source code. Closed source, as Docker Hub is.
Best for: Workloads on EU infrastructure where the pull should never leave the region
Scaleway Container Registry is a managed registry in Paris, Amsterdam or Warsaw, and its case against Docker Hub is geography rather than politics. An image pulled from the same region as the Kubernetes Kapsule cluster or the serverless container that needs it arrives faster and without a transatlantic hop, and there is no counter watching the address it came from.
It handles the ordinary registry work without ceremony: versioned images, privacy controlled per namespace and per image, replication across object storage, and authentication on every Docker action. Scaleway is part of the Iliad Group and every data centre it runs sits inside the EU, so no regional selector is involved and no Data Privacy Framework paperwork applies.
The trade is that this is infrastructure, not a product with a community around it. There is no public index for anyone to browse, the surrounding tooling is thinner than Harbor's, and it makes most sense when your compute already lives on Scaleway. Bolted onto a workload running elsewhere, it is one more provider relationship with an egress path in the middle.
What Scaleway does better than Docker Hub
- Every data centre is inside the EU — Paris, Amsterdam and Warsaw — where Docker Hub has no European region at all
- The registry sits in the same region as the compute, so pulls are local rather than transatlantic
- No pull rate limit counted against your egress address
- Wired into Kapsule and Serverless Containers, so deployment credentials are one concern instead of two
- A French operator inside EU jurisdiction, with no transfer mechanism to document
Where Scaleway is a step down from Docker Hub
- No public distribution: it replaces your private Docker Hub, not the place strangers pull from
- Thinner policy tooling than a Harbor-based registry — no comparable signing and scanning suite
- Most valuable when your workload is already on Scaleway; less so as a standalone registry
- Three locations, so a globally distributed platform still needs something in front of it
Standout against Docker Hub. It is the option where the image and the machine that pulls it are in the same EU region, which is the only way to make pulls both sovereign and fast.
- Which law reaches it. EU (Germany). Docker Hub is run from the United States, so the CLOUD Act obliges the provider to hand over data on a valid order regardless of which country the servers are in.
- Where the data sits. EU (Germany).
- Source code. Open source, where Docker Hub is not: you can read what it does rather than take the description on trust.
- Independently checked. GDPR.
Best for: Free software projects that publish an image alongside the source
Codeberg is a forge rather than a registry, but its package registry accepts container images among two dozen package types, and its own infrastructure images are published there — so this is a live service, not a checkbox. For a project whose image is an artefact of a public repository, that puts source, release and image under one German association with no commercial owner and no counter.
The relevant contrast with Docker Hub is the absence of a business model aimed at you.
There are no pull quotas to negotiate and no organisation seats, and in July 2026 the members voted a restriction on largely machine-generated projects into the terms of use, with the announcement stating that the forge does not and will not use hosted code or data to train "Artificial Intelligence" tools. The terms also name cryptocurrency projects as content Codeberg will not carry. These are the rules of a members' association, published and votable rather than announced.
The limits are just as plain. The terms open the platform to free and open source projects, so a company image built from proprietary code does not belong here. Capacity is shared and funded by donations, there is no service level, and nobody will discover your image the way they stumble across an official image on Docker Hub.
What Codeberg does better than Docker Hub
- Free, with no pull counter and no seat to buy, where Docker Hub meters anonymous pulls per IP address
- The image sits beside the repository and the licence that produced it, rather than in an unrelated account
- Run by a German association under published rules, against a Palo Alto company operating under US law
- A published commitment not to train AI tools on hosted content, which Docker makes no equivalent promise about
Where Codeberg is a step down from Docker Hub
- Only for free and open source projects; proprietary company images are outside the terms of use
- No service level and shared, donation-funded capacity, so it is not where production should pull from
- No vulnerability scanning, signing policy or replication of the kind a registry product provides
- No audience or discovery: Docker Hub's official images are found, this one has to be told to people
Standout against Docker Hub. The only entry here that costs nothing and is governed by its own users — provided the project is open source, which is the price of admission rather than a footnote.
- Which law reaches it. EU (France). Docker Hub is run from the United States, so the CLOUD Act obliges the provider to hand over data on a valid order regardless of which country the servers are in.
- Where the data sits. 30+ data centres, majority in Europe.
- Source code. Closed source, as Docker Hub is.
- Independently checked. SecNumCloud (ANSSI), GAIA-X founding member.
Best for: Organisations that need scanning, signing and replication rather than just storage
OVHcloud Managed Private Registry is the CNCF Harbor project run as a service, which matters because Harbor is the registry with policy built in: role-based access control, automatic vulnerability analysis, image replication between registries, automated deletion of unused images, Cosign-based content trust and detailed logs for compliance. That is a longer list than Docker Hub offers on any plan.
The commercial shape is the other difference. It is sold as sized plans — 200 GB on S and M, 5 TB on L, with the higher tiers offering a stronger availability commitment — and inbound and outbound traffic are included rather than metered. Against a service whose paid tiers are unlimited subject to fair use, a plan with a number on it is a different kind of promise.
OVHcloud SAS operates from Roubaix, designs and builds its own servers, is a founding member of GAIA-X and holds SecNumCloud from ANSSI, the French cybersecurity agency, which specifies French territory, French staff and French jurisdiction. For a buyer who has to answer more than "is it GDPR compliant", that is the answer on this page. The cost is that Harbor has more moving parts than a plain registry, and that this is a private registry with no public audience attached.
What OVHcloud does better than Docker Hub
- Harbor's policy engine: RBAC, vulnerability scanning, Cosign signature verification and replication, none of which Docker Hub bundles
- Built on Harbor, whose proxy cache for upstream registries is the actual cure for pull-limit failures rather than a workaround — confirm it is exposed on the plan you buy
- Inbound and outbound traffic included in the plan, against Docker's unlimited-under-fair-use wording
- SecNumCloud qualification from ANSSI, so French territory, staff and jurisdiction are specified rather than implied
- Sized plans from 200 GB to 5 TB with a stated availability commitment, where Docker Hub publishes none
Where OVHcloud is a step down from Docker Hub
- A private registry: it does not replace Docker Hub as a place for strangers to find your image
- Harbor is more to learn and more to operate than pushing to a hosted namespace
- Plans are sized in advance, so growth is a plan change rather than a line on next month's invoice
- The broader OVHcloud catalogue is large enough that finding the right product takes a conversation
Standout against Docker Hub. It is the only entry here built on Harbor, the registry whose proxy cache addresses the upstream images your builds actually pull — the half of the Docker Hub problem the other options leave untouched.
What actually breaks when you switch
The inventory is the job. Image names hide in Dockerfiles, Compose files, Helm values, Kubernetes manifests, Terraform, CI configuration and the odd shell script, and every one of them has to be found before the old credentials are revoked. Grep for the registry hostname, then grep again for bare image names, because those are the ones still pointing at Docker Hub.
Digests and tags will bite once. Anything pinned by digest has to be re-pinned after the copy, because the digest follows the content and the tooling that verifies it does not care about your migration. Copy with a tool that preserves multi-architecture manifests rather than pulling and pushing on one machine, or your ARM users will find out before you do.
And keep the old account alive longer than feels necessary. A registry migration is discovered by whatever runs quarterly — a disaster recovery drill, a customer's air-gapped installer, a scheduled rebuild of a base image. Leave the Docker Hub repositories in place, read-only, until one full cycle of those has passed.
Will moving our images actually stop the rate-limit failures?
Only partly, and this is where most migrations stall. Pushing your own images elsewhere removes your images from Docker Hub's counter, but every FROM line that names an upstream image still pulls from Docker Hub, and those are the pulls a CI fleet makes most often.
The complete fix has two halves: your registry for your artefacts, and a cache or mirror in front of the upstream images you depend on. Harbor, which is what OVHcloud runs as a managed service, does proxy caching of remote registries natively; with a plain registry the equivalent is a scheduled job that copies the handful of base images you actually use into your own namespace and a policy that Dockerfiles reference those.
Teams that do only the first half report that the pipeline still fails, just less often, and conclude the move was pointless. It was half a move.
Is a registry inside our git platform enough?
For most teams, yes, and it is the cheapest option to adopt because there is nothing new to buy or authenticate against. GitLab ships a container registry on every tier, on GitLab.com, on self-managed installations and on Dedicated, speaking both Docker V2 and OCI, and the CI job already has a token that can push to it.
The argument against is concentration. Your source, your pipelines and your artefacts then share one platform, one outage and one compromise, and a registry sized for a forge is not sized for a monorepo producing hundreds of image tags a day.
The split most organisations end up with is unremarkable and sensible: images from CI go into the forge registry, production pulls from a dedicated registry in the same region as the cluster, and the two are kept in step by the pipeline.
Does it matter which European country the registry sits in?
Less than which region your cluster is in, and that surprises people who arrive with a sovereignty question. A registry two hundred milliseconds and one egress bill away from the machines pulling from it is a slow, expensive registry regardless of the flag on it.
Scaleway keeps every data centre inside the EU — Paris, Amsterdam and Warsaw — which makes it the straightforward answer when the workload already runs there, because the pull never leaves the region. OVHcloud spans more than thirty data centres and holds SecNumCloud from the French agency ANSSI, which is the qualification that appears in public-sector procurement where GDPR alone is not a sufficient answer.
Pick the one your compute is already in. Then check the egress terms, because that is where a registry quietly becomes expensive.
What happens to the images we publish for other people?
They lose their doorstep. An image on Docker Hub is pulled by name with no configuration, and that convenience is the entire reason to publish there; every alternative requires users to type a registry hostname first.
For a free software project, publishing alongside the source is a reasonable answer: Codeberg's package registry accepts container images, so the release and the code that produced it sit in one place under one licence. For a commercial vendor distributing to customers, keep the Docker Hub presence for distribution and move the internal pipeline elsewhere — those are different problems and only one of them is yours to solve.
Either way, announce the new location in the repository and keep the old tags in place. Nothing annoys downstream users like an image that stops receiving updates without saying where it went.
Which one to pick
If the problem is failing builds and an unpredictable counter, OVHcloud is the one to look at first, because Harbor can cache the upstream images your pipelines pull and the traffic is inside the plan rather than on the invoice.
If your workload already runs on European infrastructure, put the registry in the same region as the compute: Scaleway keeps everything in Paris, Amsterdam or Warsaw, and a local pull is both the cheap answer and the fast one.
If the images are purely an output of your pipeline and never leave the company, GitLab's registry is the least work of anything here — and only a self-managed or Dedicated instance changes the jurisdiction, which the hosted version does not.
If the project is open source, Codeberg will host the image beside the code for nothing, under rules its members voted on. And whichever you choose, mirror the upstream base images you depend on, or you will have moved your artefacts and kept the dependency that was breaking your builds.
Frequently Asked Questions
OVHcloud Managed Private Registry if you want a full-featured registry with scanning, signing and replication and a predictable monthly plan. Scaleway Container Registry if your workload already runs on Scaleway and you want the images in the same EU region as the cluster. GitLab if the images should live beside the code and the pipeline that builds them. Codeberg if the project is free and open source and the image is part of a public release.
Docker's documentation gives 100 pulls per six hours for anonymous pulls, counted per IPv4 address or IPv6 /64 subnet, and 200 per six hours for a free Docker Personal account. Pro, Team and Business are described as unlimited subject to fair use. Version checks do not count, and a multi-architecture image counts as one pull for each architecture you actually pull.
No. Docker publishes no European region and sells no residency add-on of any kind. Its privacy policy states that Docker and its services are based and provided primarily in the United States, with transfers out of the EEA covered by the EU-U.S. Data Privacy Framework and standard contractual clauses. Docker, Inc. operates from Palo Alto, California.
Personal is free and includes one private repository. Pro is $9 per month billed annually, or $11 month to month. Team is $15 per user per month annually, or $16 monthly, for up to 100 users. Business is $24 per user per month. Paid plans lift the pull counter and add Build Cloud and Testcontainers Cloud minutes.
The current documentation describes no inactive-image deletion policy: storage is presented as unlimited under a fair-use policy. What it does reserve is the right to throttle or charge for excessive data transfer, pull rates or storage, without stating the threshold. Treat that as the reason to keep your own copy of anything you would miss, rather than as an imminent deletion date.
Yes, and it is the step that actually fixes builds. Harbor, which OVHcloud runs as a managed service, can proxy and cache a remote registry so upstream images are fetched once and served locally afterwards. With a plainer registry, a scheduled copy of the base images you depend on plus a rule that Dockerfiles reference your namespace achieves the same thing with more discipline and less magic.
For images consumed only inside your own network, often yes: the registry API is a standard and the software is undemanding. What you take on is storage growth, garbage collection, certificate renewal and the availability of something every deployment depends on. A managed European registry costs money precisely to remove the night when nothing can deploy because a disk filled up.
It changes it. An image on Docker Hub is addressable by its bare name, and anywhere else the registry hostname becomes part of the image reference. That means every consumer of your image edits a line, which is fine for an internal platform team and a real cost for a widely used public image. Keep the Docker Hub tags published if strangers depend on them.
The registry itself is an afternoon: create the namespaces, add the credentials to CI, repoint the push and pull steps, and copy the tags you want to keep. The work that follows is inventory — finding every Dockerfile, Compose file, Helm chart and Kubernetes manifest that names an image, and deciding which upstream images you will mirror. For a mid-sized estate that is a fortnight, mostly reading YAML.
Explore More European Alternatives
Discover privacy-focused European alternatives to other popular US tech services.