# Harbor

A container registry you host. Harbor is Apache-2.0 (CNCF) — Docker Hub without the pull and seat meter.

**Replaces:** Docker Hub

**Tier:** Medium

## Problem

Docker Hub Pro is $9/user/month billed yearly ($11 monthly); Team is $15/user/month billed yearly ($16 monthly). Personal is free until pull rate limits bite. You wanted images you can push, scan, and pull from CI. Harbor is the CNCF registry: projects, RBAC, and a replication policy. This is not Docker Desktop, Build Cloud, or Scout — those stay on a workstation or another tool.

## Stack

- [Harbor](https://goharbor.io) — Apache-2.0 CNCF container registry

## Estimated SaaS cost saved

| You stop paying | Typical / year | Self-host instead |
|---|---:|---|
| Docker Hub Pro / Team (small team) | $1,800 | Harbor + a volume |

**About $1,800 / year** on a small team, before you count lock-in.

## Deploy on Railway

Placeholder: Harbor + Postgres + Redis and a volume (or S3-compatible store) for blobs. No one-click template in this repo yet — Start on Railway. Git hosting can sit on /stacks/forgejo-git.

[Start on Railway](https://c17.io/go/railway/harbor-registry?from=%2Fstacks%2Fharbor-registry.md)

[Forgejo if the pain is the git host, not the image registry](https://c17.io/stacks/forgejo-git)

## AGENT_PROMPT

```
Replace Docker Hub with Harbor (https://goharbor.io).

- Postgres + Redis + a volume (or S3) for blobs. Bind the registry and the UI. Create one project, one robot account, push one image.
- Point CI at the new registry. Lock anonymous pulls if that is the policy.
- Write AGENT_PROMPT.md. Do not claim Docker Desktop, Build Cloud, or Scout parity — this page is the registry.
```

## FAQ

### Is this Docker Desktop?

No. Harbor stores and serves images. Docker Desktop, Build Cloud, and Scout are a different product. Forgejo Packages can hold a few images if you already run that forge — Harbor is the dedicated registry.

### Will my docker login keep working?

Yes, against the new host. Recreate credentials. Rate limits you hit on hub.docker.com go away because you are pulling from yourself.

Source: https://c17.io/stacks/harbor-registry
