Radar OSS · Image filesystem

Inspect container contents without kubectl exec.

Click any container in a Pod view and browse its full filesystem - tree, sizes, symlinks, search, download. No docker pull, no exec, no local daemon. Private registries included.

Apache 2.0 · Runs on your laptop or in-cluster · No account needed
radar · image filesystem viewer
Radar image filesystem viewer showing a container image tree with file sizes and permissions
The problem

“What actually shipped in this image?”

You're debugging a flaky deployment. The image tag is v2.4.0-rc3. You think it has a specific binary at /app/bin. You don't remember if the Dockerfile actually put it there.

Option A: kubectl exec -it pod -- ls /app/bin. That assumes the pod is still running. It assumes the container has ls installed. It assumes your distroless image has a shell, which it doesn't.

Option B: docker pull ... && docker run ... on your laptop. Now you need docker installed, you need the image-pull credentials the cluster uses (the ones you don't have on your laptop), and you're running a random container locally to answer a question about a remote one.

Radar's Image Filesystem Viewer skips both. It pulls the image layers directly from the registry using the cluster's own ImagePullSecrets, extracts them to a local cache, and shows you the filesystem in a tree. No docker. No exec. No shell in the image.

What it does

Browse, search, download - any image.

Full filesystem tree with sizes

Browse the image like a local directory. File sizes, permissions, symlinks - all rendered in a tree view with expandable directories. Discover what shipped without running the container.

Search across the entire image

Find every file matching a pattern across all layers. Useful when you're asking “does this image have a compiled binary at /app?” and don't want to shell in to find out.

Download individual files

Grab one file from the image without pulling the whole thing. Debug a bad config baked into a build, inspect a vendored binary, extract an embedded asset.

Private registries via ImagePullSecrets

Works with Docker Hub, Quay, GitHub Container Registry, GCR, ECR, and ACR. Radar reuses the cluster's existing ImagePullSecrets - no separate auth config to wire up.

Disk-based layer caching

First browse pulls and extracts layers to a local cache keyed by digest. Second browse of the same image reads straight from cache - no re-download, no re-decompression.

One click from any Pod

The viewer lives inside the Pod detail view. Click a container, click Image Filesystem, you're in. No separate tool to open, no docker daemon required, no mental context switch.

Where it earns its keep

Four moments you'll actually use this.

Debug a distroless image

Distroless has no shell. `kubectl exec` returns exit 126. Radar shows you the filesystem anyway - because it doesn't need a shell in the image.

Confirm what CI actually built

The Dockerfile says `COPY dist /app`. Does the image really have `/app/index.html`? One click, find out, without pulling 2GB to your laptop.

Extract a config the app is using

Service reads config from `/etc/myapp.yaml`. That file is baked into the image, not mounted. Download it from the Radar UI, diff against your expected config, done.

Investigate a CVE

Security team says: “the patched binary should be at /usr/bin/openssl, version 3.0.14.” Open the image, navigate to `/usr/bin/openssl`, and see what actually shipped - download the binary and check its hash if you need proof. Faster than pulling and exec'ing anything.

Under the hood

How it actually works.

01

Registry pull, not docker

Radar talks the OCI distribution spec directly. No docker daemon, no containerd, no local runtime. Works on laptops without docker installed.

02

Reuses cluster secrets

Radar reads the Pod's ImagePullSecrets, passes them to the registry client, and pulls authenticated. Your private-registry access doesn't need to be replicated on your machine.

03

Cached by digest

Layer cache is keyed on digest. Two pods running the same image share the cache. Re-opening the viewer skips pull and extraction; the second engineer on the same image pays no download cost.

Open source

Apache 2.0. Yours to inspect, fork, or self-host.

Radar's source is on GitHub. Every feature on this page is in the binary you install with brew install. No telemetry, no mandatory login, no cluster data out. The one outbound call is an anonymous version check when the UI opens. If we ever change that, you'll see it in a diff first.

skyhook-io/radar
2.6k★ GitHub stars
Apache 2.0 · Actively maintained
FAQ

Questions we get about the image filesystem viewer.

Does this work on distroless images with no shell?
Yes - that's the point. Radar pulls image layers directly from the registry and extracts them, so it doesn't need kubectl exec or a shell inside the container at all.
Do I need Docker installed to use it?
No. Radar talks the OCI distribution spec directly - no docker daemon, no containerd, no local runtime required.
Does it work with private registries?
Yes. Radar reuses the cluster's existing ImagePullSecrets, so it works with Docker Hub, Quay, GitHub Container Registry, GCR, ECR, and ACR without separate auth config.
Can I download a single file instead of the whole image?
Yes. Grab one file - a baked-in config, a vendored binary, an embedded asset - without pulling the whole image to your laptop.
Does browsing the same image twice re-download it?
No. The layer cache is keyed by digest, so the first browse pulls and extracts, and every subsequent browse of that image - by you or a teammate on the same cache - skips both.

The view kubectl exec can't give you.

Browse any image's filesystem - distroless, private registry, whatever - without touching a running container.

Apache 2.0 OSS · Unlimited clusters self-hosted · Hosted free tier for up to 3 clusters