Docker Cloud
docker.com · Compute, Storage · 2 records · JSON
- Docker Hub (free Personal plan, public repositories) Storage★ qualifiesanonymousno cardRper-ip-shaping
- Docker Cloud Sandboxes Computepaidemail?card?Drequest-rate
Docker Hub (free Personal plan, public repositories) Storage
★ qualifiesanonymousno cardRper-ip-shaping
| Free tier | Unlimited public repositories on the free Personal plan; NO documented storage cap on public repositories. Docker's own limits table lists only pull-rate and repository counts, with no storage row. Docker's Feb 2025 policy post says storage-based billing is 'indefinitely delayed' with a promised six-month notice. unit unlimited; metered on stored-bytes |
|---|---|
| Price | none stated |
| Per-object cap | not stated |
| Retention | Pull count 100/6h anonymous or 200/6h authenticated per IP — that is the binding constraint for a 500GB-1TiB/day fetch workload (needs few, large blobs rather than many small ones) |
| Egress | Free and unmetered per-GB; the gate is a pull COUNT, not bytes: 'Unauthenticated users: 100 per IPv4 address or IPv6 /64 subnet' and 'Personal (authenticated): 200' per 6 hours. Blobs are served by 307 redirect to a CDN, so one pull can be a multi-GB blob. |
| Identity | anonymous derived from the record's prose, not from an identity field, and no signup was executed: repo a striped volume of unlimited size. Pull count 100/6h anonymous or 200/6h authenticated per IP — that is the binding constraint for a 500GB-1TiB/day fetch workload (needs few, large b |
| Limits |
Pull count 100/6h anonymous or 200/6h authenticated per IP — that is the binding constraint for a 500GB-1TiB/day fetch workload (needs few, large blobs rather than many small ones). No published per-layer size cap, but the Docker distribution S3 driver historically broke above 10GB per layer (distribution/distribution#2814), so shard at ~5GB. The excess-use rate limit returns plain 429 in the order of thousands of req/min per IP. |
| Binding | per-ip-shaping one stream is shaped, and a user's throughput is the shaped rate times the number of streams |
| Interface | oci oci |
| Tooling | oras push / docker push; purpose-built wrapper: github.com/Androsh7/layerstash (chunks >5GB files into ~5GB layers, uploads to Docker Hub or GHCR; author reports 1.8TB personally stored), github.com/xausky/DockerRegisterCloud (654 stars, registry-as-netdisk client with Flutter GUI + direct-download server). |
| Composes with | Unlimited public repos per account, and the free account count itself is unlimited. Layer count per repo is not capped, so a single repo holds arbitrarily many blobs; layerstash's <base-tag>-<chunk_n> scheme makes one repo a striped volume of unlimited size. |
| Reliability | Storage is unpriced today but Docker reserves the right to add charges and has flip-flopped before (announced Mar 2025, cancelled Apr 2025); the 100-pull/6h IP limit will throttle any fetch fan-out from one host. |
| Notes | Unlimited public repositories on the free Personal plan; NO documented storage cap on public repositories. Docker's own limits table lists only pull-rate and repository counts, with no storage row. Docker's Feb 2025 policy post says storage-based billing is 'indefinitely delayed' with a promised six-month notice. |
| Evidence rung | reported One page read moves it to documented. |
| Checked | 2026-10-21 (inherited); stale on 2026-11-04 |
| Parsed numbers |
|
Evidence (5)
| date | source | what it proved |
|---|---|---|
| 2026-10-21 | docs.docker.com/docker-hub/usage/ | read live: table has columns Pull rate limit / public repos / private repos only; Personal = Unlimited public repos, 200 pulls/6h; no storage row anywhere on the page |
| 2026-10-21 | www.docker.com/blog/revisiting-docker-hub-policies-prioritiz | read live: 'Storage Charges Delayed Indefinitely ... we have decided to indefinitely delay any storage charges', and 'We did not enforce the Docker Hub rate limit changes previously scheduled for April 1, 2025' |
| 2026-10-21 | auth.docker.io/token?service=registry.docker.io&scope=reposi | probe: GET -> 200 (2698-char token); then GET registry-1.docker.io/v2/library/alpine/manifests/latest -> 200, 9218 bytes, anonymous, no account |
| 2026-10-21 | registry-1.docker.io/v2/library/alpine/blobs/uploads/ | probe: POST -> 401 (anonymous push correctly refused; write requires an account, read does not) |
| 2026-10-21 | github.com/Androsh7/layerstash | read live: 'I have stored a total of 1.8TB in a public repository on Docker Hub androsh7/archive' |
Unknown or withheld values (4)
$.free_tier.notesprocess$.per_object_cap.notesnot-extracted$.per_object_cap.statednot-extracted$.retention.notesnot-extracted
Docker Cloud Sandboxes Compute
paidemail?card?Drequest-rate
| Free tier | no free tier: compute bills per second from $0.07 an hour for 1 vCPU and 2 GiB, and a paused sandbox costs nothing; volumes and egress are free unit none; metered on none |
|---|---|
| Price | none stated |
| Per-object cap | not stated |
| Retention | not stated |
| Egress | not stated |
| Identity | email (placeholder) not published |
| Limits |
not stated |
| Binding | request-rate |
| Interface | unknown |
| Tooling | not stated |
| Composes with | not stated |
| Reliability | no reliability event recorded |
| Evidence rung | documented the announcement page was read on 2026-10-22 and states the per-second metering, the paused-sandbox behaviour and the size ladder. The USD 25 credit the record carried is not on it, so the verdict moves to paid-only on what the page does say |
| Checked | 2026-10-23 (live); stale on 2026-11-22 |
| Parsed numbers |
|
Evidence (2)
| date | source | what it proved |
|---|---|---|
| 2026-10-02 | www.docker.com/blog/introducing-cloud-sandboxes-start-on-you | not published |
| 2026-10-22 | www.docker.com/blog/introducing-cloud-sandboxes-start-on-you | 'Cloud Sandboxes are pay-as-you-go. We meter compute by the second, and nothing else. A paused sandbox costs nothing. Volumes, egress, and hosting public images and Kits are free.' with sizes from Micro at $0.07 an hour (1 vCPU, 2 GiB) to XL at $1.12 (16 vCPU, 32 GiB), quoted |
More fields (16)
{
"talaria_m10h_usd": 42.0,
"talaria_m24h_usd": 100.8,
"nemo_m10h_usd": 42.0,
"keep_rate": 1.0,
"keep_rate_basis": null,
"billing_model": "unclassified",
"shape": {
"vcpu": 2,
"ram": 4,
"disk": null,
"gpu_class": null,
"gpu_count": null,
"note": "Small is the default at 2 vCPU and 4 GiB for $0.14 an hour"
},
"session_cap": {
"wall_clock_min": null,
"idle_reap_s": null,
"restart_required": false,
"note": "a paused sandbox costs nothing, so stopping is a pause rather than a loss; the page describes running an agent for hours with the laptop closed"
},
"persistent_storage": null,
"network_out": null,
"price_note": null,
"free_tier_kind": "none",
"granularity": {
"min_billed_s": 0,
"rounding_s": null
},
"burst_x": 1.0,
"ps": {
"gib": null,
"price": "volumes are free",
"durability": "volume",
"on_stop": true,
"on_destroy": false,
"retention": "until deleted"
},
"net": {
"out": true,
"in": true,
"ports": "published ports",
"static_ip": null,
"ipv6": null,
"allowance": "egress is free"
}
}Unknown or withheld values (17)
$.chainingnot-stated$.egress.meteredegress-unknown$.egress.termsnot-stated$.evidence[0].provedprocess$.extras.keep_rate_basisprocess$.extras.price_noteprocess$.identity_cost.detaildefaulted$.identity_cost.kindidentity-defaulted$.interfaceinterface-unknown$.interface_detailwithheld$.limits_notenot-stated$.per_object_cap.notesprocess$.per_object_cap.statednot-stated$.reliability_notenone-observed$.retention.notesnot-extracted$.retention.statednot-stated$.toolingnot-stated