-
feat: serve local docker repos as a real registry (#103)
ci/woodpecker/tag/docker Pipeline was successfulreleased this
2026-07-05 16:55:53 +10:00 | 19 commits to master since this releaseWhy
Local
dockerrepos had no write path — the/v2Docker Registry API only proxied to upstreams. This makes a local docker repo a genuine container registry sodocker push/docker pull(and podman/skopeo/buildah) work against it directly, matching the project principle that a local repo is the real thing rather than a mirror.Changes
- Implement the Docker Registry HTTP API V2 read/write half for local docker repos: blob uploads (monolithic and chunked POST/PATCH/PUT), manifest push,
tags/list, and blob/manifest GET/HEAD. - Store blobs and manifests through the existing content-addressable store; keep a
local_filesreference per (repo, image) so the GC does not reap them. Tags are mutable (UpsertLocalFile); digests and blobs are immutable. - Dispatch
/v2reads to the local handler for local docker repos and fall through to the upstream proxy otherwise; writes are local-docker only. - Add
UpsertLocalFilefor mutable tag references. - Cover the push/pull round-trip with a dockerised e2e test and unit-test the registry path parser. Document the registry in the README.
Verification
scripts/docker-e2e.shpasses, including the newTestLocalDockerPushPull.- Verified a real end-to-end round-trip with skopeo against a live instance: pushed
hello-world, pulled it back, loaded it into the docker daemon, and ran it successfully.
Reviewed-on: #103
Co-authored-by: Ben Vincent ben@unkin.net
Co-committed-by: Ben Vincent ben@unkin.netDownloads
- Implement the Docker Registry HTTP API V2 read/write half for local docker repos: blob uploads (monolithic and chunked POST/PATCH/PUT), manifest push,