How to use Chainguard Containers
Learn how to use Chainguard Containers in your applications, including pulling images, extending base images, and …
For the complete documentation index, see llms.txt.
Learn answers to your questions about Chainguard Containers. Chainguard provides container images designed with security as the primary focus, featuring zero known CVEs, minimal attack surface, and built-in SBOMs for every image.
Chainguard Containers are based on Wolfi, a Linux undistro we built specifically to address software supply chain security issues. We call it an undistro because it doesn’t contain certain software you’d normally find in a traditional Linux distribution such as Debian or Alpine. Wolfi is a minimal Linux distribution designed specifically to be used as a base for stripped-down container images.
The Google distroless images follow a similar philosophy to many of our images: they are minimal images that don’t include package managers or shells. The main difference is in the implementation. The Google distroless images are built with Bazel and based on the Debian distribution, whereas Chainguard Containers are built with apko and based on Wolfi. We believe our approach is more maintainable and extensible.
There are currently over a thousand Chainguard Containers available, which are segmented as Free or Production. You can read more about this in the next question.
Chainguard Containers are primarily available from Chainguard’s registry, but a selection of Free images is also available on Docker Hub. You can find the complete list of available Chainguard Containers in our public Containers Directory or within the Chainguard Console.
You can get free Chainguard Containers for your organization. You can also upgrade for more versions, SLAs, and dedicated support.
| Free | Production |
|---|---|
| Free for everyone, anywhere | Contact us for pricing |
| Latest versions | Major and minor versions |
| Community support | Enterprise SLAs |
| Developer docs | Customer support |
You can read more about the differences between Free and Production Containers in our Containers overview.
Yes, Chainguard Free Container images are available on Docker Hub. As a Docker Verified Publisher, Chainguard has met Docker’s stringent standards for security, quality, and transparency. This status signifies that our container images are trusted, reliable, and have undergone rigorous verification processes. To use Production Containers, pull them from Chainguard’s registry.
An SBOM is a Software Bill of Materials, which is a list containing detailed information about all software that is included within a software artifact, whether it’s an application, a container image, or a physical appliance.
SBOMs provide visibility into the software you depend on. They can allow automated systems to quickly identify issues such as unpatched vulnerabilities, since SBOMs typically include the version of each dependency listed.
Chainguard Containers are officially maintained by Chainguard engineers.
Yes. Chainguard builds from open source, and the tools it uses to build packages and containers are freely available in Wolfi. What’s hard to reproduce is the scale.
Before Chainguard adds a container, it reviews the upstream source: whether the project is actively maintained, whether it builds from source, and whether its license permits Chainguard to use and distribute it. Getting a complicated project to build the first time can take days or weeks. Once it builds, the Chainguard Factory rebuilds it automatically every time that project tags a release.
In a do-it-yourself pipeline, the rebuilding falls to a person, usually a project maintainer or a security engineer. Doing it for every image on every upstream release is where most teams run out of hours.
Chainguard Containers are rebuilt every night to ensure that new package versions and security updates in upstream Wolfi are quickly applied.
Chainguard Containers are designed to be minimal, and many of them don’t come with a package manager. Depending on your stack and specific dependencies, you may need to include additional software by combining -dev container images and our distroless images in a multi-stage Docker build.
Chainguard Containers only contain packages that come from the Wolfi Project or those that are built and maintained internally by Chainguard.
Since March 2024, Chainguard has maintained one version of each Wolfi package at a time. These track the latest version of the upstream software in the package. Chainguard has ended patch support for previous versions of packages in Wolfi. Existing packages remain in Wolfi and you may continue to use them, but be aware that older packages no longer receive updates and accrue vulnerabilities over time. The tools we use to build packages and images remain freely available and open source in Wolfi.
This change ensures that Chainguard can provide the most up-to-date patches to all packages for our customers. Note that specific package versions can be made available in Production containers. If you have a request for a specific package version, contact us.
Chainguard's Custom Assembly tool is the officially supported approach for extending Chainguard Containers with additional packages. Custom Assembly automatically ensures all packages remain on compatible versions and handles rebuilds when packages are updated, eliminating version conflicts and reducing maintenance overhead.
While using apk add to add packages in a Dockerfile or similar
is effective, issues can arise when packages in a base image conflict with
new packages that are added. This can be particularly pronounced when core
packages are updated — there can be brief windows when the latest version of
a base image has a conflict with the latest version of a package.
For example, when the openssl package is updated, there will be
a brief window where base images with an old and potentially incompatible
version of libcrypto, and attempting to
apk add openssl will fail. This conflict will be resolved in a
few hours when a new version of the base image is released. The only way
around this is to pin to specific versions of packages and images, which
adds its own significant maintenance burden.
Refer to our Custom Assembly documentation for more information.
Chainguard investigates the CVE and marks relevant images as affected or not. If Chainguard can identify a patch that’s unreleased, Chainguard may apply a patch before it lands upstream. In either case, when the patch lands upstream, Chainguard picks it up and rolls it out.
There are several Chainguard Containers container images–such as Druid and Spark–with a notable number of CVEs that are marked pending-upstream-fix. The reasons that these CVEs can’t be remediated by standard engineering procedures include: some vulnerabilities can only be patched through major version upgrades, which often break compatibility through broken builds or tests; many of these CVEs (over fifty percent by one internal Chainguard analysis) stem from “shaded” JARs, JAR files that bundle their dependencies internally; and a small portion of these CVEs have no fix available. The Chainguard engineering team continually investigates new approaches to fixing these persistent CVEs.
Chainguard is not responsible for CVEs in software you add on top of base images.
Logging in is optional if you are only using Free containers. That being said, there are benefits for all users who authenticate to Chainguard’s registry, as Chainguard provides notifications of version updates, breaking changes, or critical security updates.
To learn how to authenticate into Chainguard’s registry, you can review our authentication documentation . You can read more about the thought process behind authentication in our blog post, Scaling Chainguard Containers with a growing catalog and proactive security updates.
You need to ingest Chainguard Containers into an image repository within your FedRAMP boundary. Your repository requires FedRAMP but Chainguard does not since we’re outside the boundary. Reach out if you need more details.
Chainguard containers are OCI containers. eBPF operates at the kernel-level at runtime. This means an eBPF agent or sensor doesn’t affect Chainguard Containers, and vice versa.
Last updated: 2026-09-08 00:00