eval.build rebuilds your existing Docker images in a hermetic, content-addressed sandbox — so you get bit-for-bit reproducibility, a complete SBOM, and continuous CVE auditing. Same Dockerfile. No new tooling to learn.
You wrote a Dockerfile. We rebuild it inside a hermetic, content-addressed sandbox, prove the output matches your original bit-for-bit, and ship you an OCI image with a complete bill of materials and live CVE tracking. No new build system to adopt. No changes to your Dockerfile.
From your existing build to a reproducible, audited OCI image — and we tell you when something doesn't match.
We turn your Dockerfile into a typed intermediate representation. Every instruction, every layer, every implicit assumption.
We resolve every step of your build to a content-addressed, hermetic graph — pinned versions, pinned sources, no implicit network.
We build both versions in a sandbox and diff their filesystems. If they don't match, we don't ship.
SBOM and CVE scan run on every build. New vulnerabilities trigger automatic re-scans against your shipped images.
The three properties Docker doesn't give you, without giving up the Dockerfile you already wrote.
Bit-for-bit identical outputs across machines and time. Same input, same hash, forever.
Complete SBOM, including system packages and language deps, with exact provenance for every byte.
Every image is rescanned against new CVE disclosures. You hear about vulns from us before you hear about them from your security team.
Chainguard and apko make a different tradeoff than we do. Here's the honest version.
| Your current Docker build | Chainguard-style rewrites | eval.build | |
|---|---|---|---|
| Reproducible builds | no | yes | yes |
| Full SBOM | partial | yes | yes |
| Keep your Dockerfile | yes | no | yes |
| Continuous CVE rescans | no | partial | yes |
| Learning curve | none | steep | none |
COPY --from=builder works exactly like you expect — artifacts flow from the
upstream node's pinned output, not from a rebuild.sed-ing config files, conditional apt installs, downloading static binaries. For the rest we flag the translation as low-confidence and
surface a side-by-side review before the image ships. You can approve, edit, or fall back to running
the original layer verbatim inside the sandbox.