The EU Cyber Resilience Act’s 24-hour reporting duty starts 11 September 2026. What it actually requires

A container vulnerability scanner you can run in sixty seconds — then keep running

Scan container images and running Kubernetes pods for vulnerabilities from your laptop with one open-source command, no account needed. Then keep the cluster scanned continuously.

There are two honest answers to "which container vulnerability scanner should I use?", and they depend on whether you need an answer once or an answer that stays true. For once: a single static binary, no daemon, no account, that scans an image or an entire running cluster and tells you which pods carry known-exploited CVEs. For continuously: an in-cluster scanner that keeps an SBOM of every running image and re-checks it as advisories are published. StackRadar ships both. This page covers the first and then explains when you want the second.

Sixty seconds, no signup: the StackRadar CLI

stackradar scan is a free, Apache-2.0 command-line scanner (source on GitHub). Point it at an image, or at your kubeconfig, and it lists every finding with severity, fixed version and whether the CVE is in the CISA Known Exploited Vulnerabilities catalogue.

install
brew install lockdep/tap/stackradar
# or
curl -fsSL https://raw.githubusercontent.com/lockdep/stackradar-cli/main/install.sh | sh
# or
go install github.com/lockdep/stackradar-cli@latest
scan
# one image, no cluster needed
stackradar scan --image nginx:1.27

# every running image in the current kubeconfig context, deduplicated by digest
stackradar scan

# just two namespaces, quieter output, exit 2 if anything exploited is running
stackradar scan -n payments -n checkout --min-severity high --fail-on kev

# a self-contained HTML report, or a live local dashboard
stackradar scan -o html --file report.html
stackradar scan --serve

What it does, and does not do:

  • Scans what is running — the digests the kubelet reports — not what a manifest says. It needs list pods, the same permission as kubectl get pods.
  • Matches OS and language packages against OSV using the embedded osv-scanner library, and flags CISA KEV entries so the exploited ones sort first.
  • Pulls images with the registry credentials you already have. An image your laptop cannot reach says not reachable from here rather than guessing.
  • Outputs a table, JSON, or a shareable HTML report; exit codes follow Grype's convention for CI gates.
  • Sends nothing to StackRadar. Package names go to api.osv.dev, one GET goes to cisa.gov. No account, no telemetry.
  • Is a point in time. Run it again tomorrow and yesterday's clean image may carry a new CVE — nothing here watches for that.
Results differ slightly from Trivy or Grype on the same image. Different package catalogers and different matchers disagree at the margins; this is normal for every pair of scanners, and the tools roundup explains where the disagreements come from.

Scanning a Docker image before it ships

For image-at-rest scanning in CI, the CLI is one option among several good free ones. Use whichever fits the pipeline you have:

ToolBest atCommand
StackRadar CLICluster scans, KEV-first ranking, HTML reportstackradar scan --image IMAGE --fail-on high
TrivyBroadest coverage: images, filesystems, IaC, secretstrivy image IMAGE
GrypeMatching an SBOM you already have (from Syft)grype IMAGE or grype sbom:bom.json
Docker ScoutDocker Desktop and Docker Hub usersdocker scout cves IMAGE

The thing none of them can tell you is what happens after the image ships: which cluster it landed in, whether it is still running three months later, and which CVE published since then applies to it.

When once is not enough: the in-cluster scanner

The StackRadar scanner is a small, source-published agent installed with one Helm chart. It generates a CycloneDX SBOM for every distinct image the cluster runs (using Syft), uploads only the SBOM, and StackRadar keeps it — so when the next advisory lands, the match happens against lists it already has. Every cluster shows up in one dashboard, findings are ranked by the Radar Score (CVSS, EPSS and KEV), and the history is kept for 30 days on the free plan, one year on Pro, two on Business.

The StackRadar cluster overview: severity counts with sparklines, the cluster's risk score and its trend, and workload and package counts for everything running in the cluster
bash
helm install stackradar-scanner oci://ghcr.io/lockdep/charts/stackradar-scanner

The quick-start guide takes about ten minutes. The difference from the CLI, in one line: the CLI answers the question you have today; the scanner makes sure you can answer the one you will have next month. The Kubernetes vulnerability scanning page goes into what continuous means in practice.

Open-source container scanning, honestly

The CLI is Apache-2.0. The in-cluster scanner and its Helm chart are published under PolyForm Shield — every line that runs in your cluster is on GitHub, signed and version-pinned, and you can read, run and modify it; what the licence forbids is reselling it as a competing service. The dashboard is the paid, managed part. If "open source" on the licence line is a hard requirement, Trivy, Grype and Kubescape all satisfy it, and the open-source roundup compares them without a thumb on the scale.

Frequently asked questions

What is a container vulnerability scanner?

A container vulnerability scanner reads a container image layer by layer, inventories the operating-system packages (apk, deb, rpm) and language dependencies (npm, PyPI, Go modules, Maven, and so on) inside it, and matches each package and version against vulnerability databases to list the known CVEs it contains. Good scanners also report the fixed version for each finding and distinguish an unscored advisory from a low one.

Which container vulnerability scanner is free and open source?

Trivy (Apache-2.0, Aqua Security), Grype and Syft (Apache-2.0, Anchore), Docker Scout’s CLI for basic image scanning, and the StackRadar CLI (Apache-2.0) are all free. Trivy and Grype scan an image you name; the StackRadar CLI additionally scans every image running in a Kubernetes cluster through your kubeconfig and flags CISA KEV entries. None of them requires an account.

How do I scan a Docker image for vulnerabilities?

With the StackRadar CLI: `stackradar scan --image nginx:1.27` prints every finding with its severity, fix version and KEV status, and needs no Docker daemon or account. With Trivy: `trivy image nginx:1.27`. With Grype: `grype nginx:1.27`. All three pull the image with your existing registry credentials and work offline from any registry you can reach.

How is scanning a running cluster different from scanning an image?

Scanning an image answers "what is in this artefact?". Scanning a cluster starts from the container digests the kubelet reports as running, deduplicates them, scans each, and attributes findings back to namespaces and workloads — so the output is "which pods are affected", not "which image is dirty". The StackRadar CLI does this from a laptop in about a minute; the StackRadar scanner does it continuously from inside the cluster.

Does the StackRadar CLI send anything to StackRadar?

No. Image pulls go to your registries, package names and versions go to api.osv.dev for matching, and one GET fetches the CISA KEV catalogue from cisa.gov. There is no account, no telemetry, and nothing is sent to stackradar.io. The HTML report and the --serve dashboard run locally.

When should I use the CLI and when the cluster scanner?

Use the CLI for a one-off answer: an incident, a CI gate with --fail-on, a report to hand to someone. Use the in-cluster scanner when you need the answer to stay current — new advisories matched against images already scanned, every cluster in one place, a dated history, and ranking by EPSS and KEV. The CLI is a point-in-time snapshot; it does not watch for anything.

The next CVE lands whether or not you are ready

One Helm install. Your whole cluster on the free plan. Every finding linked to its public advisory. Have the answer before anyone asks the question.

1 cluster, unlimited images, no credit card. Upgrade only when you add clusters.