- Shipped
- September 5, 2026 at 12:09 AM UTC
- Author
- Kamo
- Commit
- 3987644
ROOT CAUSE, for the next person who sees "short read: expected N bytes but got 0: unexpected EOF". The registry runs storage.cache.blobdescriptor: inmemory. Blobs had been deleted from its filesystem **************** is on), but the in-memory descriptor cache still held them — so: HEAD **************** -> 200 (served from cache) GET same -> 200 with ZERO bytes (no data on disk) docker push therefore skipped those layers as already-present and PUT only the manifest (observed: a single 201 for the manifest and not one blob PATCH/POST in the whole push). The image was published referencing eight layers the registry did not have, and every pull died on the first of them. Rebuilding could never fix it — each rebuild produced the same digests and skipped the same layers, which is why three consecutive builds failed identically. Deleting the repo's dangling _layers links did not help either, because the lie was in the cache, not in the links. Fixed by restarting the registry, which clears the cache: those blob HEADs now correctly 404, so this push uploads the layers instead of skipping them. Worth knowing: the same stale-cache condition can affect any repo whose blobs were deleted, and it presents as an unpullable image that rebuilding cannot fix.