mrkeyoor.com_
Wed 23 Sept 00:35 UTC
Self-Hostedevaluationupdated 26 Aug 2026

containerd review

containerd is the daemon that pulls images, stores them, starts containers, and supervises their processes on Linux and Windows. It is infrastructure for platforms such as Kubernetes, designed to sit inside a larger system rather than act as a friendly container tool for individual developers.

+29stars / 7d
Verdict

Our containerd build passed in 76 seconds, but its test command ended with 101 packages passing and 2 failing out of 103, so adopters should reproduce the suite on their target kernel and runtime setup. Use containerd when a platform needs a proven OCI and CRI foundation and your team understands the surrounding host components. Use Podman or Docker when humans, rather than another control plane, are the primary caller.

We ran it

Lab card: what happened when we ran containerdScreenshot of containerd (containerd.io)
Install✓ · 36s0 packages
Build✓ · 76s
Tests✗ · 100s101 passed · 2 failed of 103 (go test)
Repo1625 files~274,558 lines of source · 11.8 MB · 17 CI workflows · tests dir

Answers from our run

Does containerd build from source?

Dependencies installed in 36 seconds (0 packages), and the build succeeded in 76 seconds. We cloned commit 301026e into a clean Debian container with 3 CPUs and no project-specific setup.

Do containerd's tests pass?

Not all of them: 101 of 103 passed and 2 failed when we ran the project's own test command (go test). Some failures need services or credentials a bare container does not have.

Who should not use containerd?

Developers looking for a Docker-style daily command interface: the README says containerd is meant to be embedded and not used directly by end users.

What are the alternatives to containerd?

CRI-O, Podman, Docker Engine. Our containerd build passed in 76 seconds, but its test command ended with 101 packages passing and 2 failing out of 103, so adopters should reproduce the suite on their target kernel and runtime setup.

Setup3/5Build passed; host runtime pieces and 2 test failures remain
Docs5/5Detailed guides cover CRI, registries, kernels, and releases
Community5/521,184 stars, 454 issues and PRs, pushed August 26
Maturity5/5CNCF graduated runtime with active 2.x patch releases

Discussed on

  1. hnContainerd – An open and reliable container runtime, by Docker190 points
  2. hnKubernetes Containerd Integration Goes GA189 points
  3. hnShow HN: Nix Snapshotter – Native understanding of Nix packages for containerd145 points
  4. hnFlintlock – Create and manage the lifecycle of MicroVMs, backed by containerd89 points
  5. hnShow HN: Run WASM in Containerd77 points

Who it’s for

Kubernetes operators who need a supported Container Runtime Interface implementation.
Platform builders embedding an OCI-compatible runtime beneath their own control plane.
Linux or Windows infrastructure teams that can own kernel, snapshotter, registry, and runtime configuration.
Contributors prepared to work in a large Go codebase with extensive CI coverage.

Who it’s NOT for

Developers looking for a Docker-style daily command interface: the README says containerd is meant to be embedded and not used directly by end users.
Operators who want one release archive to supply the whole container host: the v2.3.4 notes say runc and CNI plugins usually need separate installation.
Old Linux hosts that cannot meet snapshotter requirements: the README suggests a 4.x kernel for the default overlay filesystem path.
Teams treating ctr as a stable automation interface: the project positions containerd's APIs and higher-level integrations, not its low-level debugging client, as the product boundary.

Setup reality

Our commit 301026e checkout installed successfully in 36 seconds with 0 packages added, then built in 76 seconds. Tests failed after 100 seconds: 101 packages passed and 2 failed out of 103. The visible log tail ends with FAIL but does not name either failing package, so it cannot support a cause.

A working host normally also needs runc and CNI plugins. Registry hosts, namespaces, CRI configuration, and the selected snapshotter all need deliberate settings; checkpoint and restore additionally requires CRIU.

The 11.8 MB checkout held 1,625 files and about 274,558 source lines. It has 17 CI workflows and a tests directory, but no Dockerfile. Linux kernel and filesystem capabilities matter more here than a containerized quick start.

containerd belongs under a platform, not in a developer's hand

containerd manages image transfer and storage, container execution, process supervision, storage snapshots, and network attachments. That sounds like a complete container product until the README states the intended boundary: larger systems embed it, while developers and end users normally interact with something above it. Kubernetes reaches it through the built-in Container Runtime Interface plugin. Other products can use its APIs and plugin model.

That boundary is the main buying advice. If you are building a cluster service, appliance, edge platform, or another container control plane, containerd supplies the difficult host-level machinery without imposing Docker's whole product experience. If a developer merely wants to build an image and run a command, containerd exposes too much plumbing and too little guidance for daily use.

What happened when we ran it

Our sandbox cloned commit 301026e with 3 CPUs and 8 GB of RAM. The 11.8 MB checkout contained 1,625 files and about 274,558 lines of source. Its install step succeeded in 36 seconds and added 0 packages, which is consistent with a Go module workflow rather than an operating-system installation. The build then completed successfully in 76 seconds.

Tests ran for 100 seconds and returned exit code 1. Our summary recorded 101 passed packages and 2 failed out of 103. The supplied tail shows successful and no-test results across several snapshotter and plugin packages, followed only by the overall FAIL. It does not identify the two failures. We can report the incomplete pass, but assigning it to privileges, kernel behavior, or missing host tools would go beyond the log.

The repository has 17 CI workflow files and a dedicated tests directory. It does not have a Dockerfile. That is sensible for software whose behavior depends on real kernel, filesystem, namespace, and runtime facilities. A green compile inside a generic build container says less than targeted checks on the distributions and storage drivers that production nodes will use.

A containerd host still needs runc, CNI, and kernel choices

Official release archives do not finish the machine. The v2.3.4 notes say operators usually need to install runc and CNI plugins separately. The README points to the required runc version, registry host configuration, namespace behavior, and client options. Checkpoint and restore needs CRIU. Each item has its own compatibility and update cycle, which belongs in the node image or provisioning system.

Storage also binds the runtime to the host. The default overlay snapshotter uses features finalized in Linux 4.x. The README gives 4.x as a reasonable starting point, with the caveat that distribution kernels backport features. Btrfs can work from a recommended 3.18 kernel but needs the kernel module and user-space tools. These are operational requirements, not details a Go binary can hide.

Windows is supported too, through OS-specific libraries such as hcsshim. Cross-platform support should not be mistaken for identical behavior. Node builders need separate validation for Windows isolation, Linux namespaces, selected snapshotters, and the network stack. containerd creates one runtime contract over those systems; it does not make their host rules interchangeable.

CRI is built in, while ctr is the wrong product surface

The CRI plugin has shipped in release binaries and been enabled by default since containerd 1.1. The README describes it as generally available and links Kubernetes validation, node end-to-end tests, configuration, and crictl debugging guidance. For a Kubernetes operator, that is the supported route: kubelet calls CRI, and crictl helps inspect what the runtime sees.

The included ctr client is useful for low-level inspection and exercising APIs. It is easy to mistake its presence for a Docker replacement because it can pull images and start containers. That skips the layers that manage networking, user intent, and long-lived application state. Human-facing workflows belong in Kubernetes tools, nerdctl, or another engine that deliberately owns them.

Release v2.3.4 changes restore behavior by default

GitHub shows a last push on August 26, 2026, 21,184 stars, and 454 combined open issues and pull requests. Release v2.3.4 arrived in August 2026 with runtime, snapshotter, Windows logging, CRI, and NRI fixes. Recent code movement plus a current issue and pull request queue indicates active maintenance; the combined 454 count must not be read as 454 confirmed bugs.

One patch detail warrants an upgrade check. v2.3.4 disables checkpoint restore through CreateContainer by default and requires an experimental configuration option to re-enable it. The release also deprecates that path and adds CRIU availability checks. Operators using restore workflows need to read the release notes and configuration rather than rolling this patch as if every default remained fixed.

The release assets span several operating systems and architectures, with dynamic and static Linux archives. The recommended dynamic archive expects glibc 2.35, while the static archive targets systems without that level and is not position-independent. Distribution packages may be the cleaner choice when they integrate service files, dependencies, and security updates with the host.

Choose containerd when another system owns the experience

containerd has earned its place beneath Kubernetes and other container platforms because its scope is disciplined. OCI registries, runtime supervision, snapshots, CRI, and a plugin architecture are enough for a control plane without forcing one developer workflow. Apache 2.0 licensing and CNCF governance also make it a practical infrastructure dependency.

That same discipline makes it a poor direct tool for many teams. You must bring runc, networking plugins, suitable kernels, storage decisions, host configuration, upgrades, and observability. Our 76-second build proves the checked-out source compiled; the 2 failures among 103 tested packages say the environment still deserves investigation. Platform engineers should shortlist it. Individual developers should start one layer higher.

Alternatives

ProjectWhat it isPick it when
CRI-OA Kubernetes-focused runtime that implements CRI around OCI runtimes.pick this instead when Kubernetes is the only control plane and a narrower CRI-first design is preferable.
Podman gh↗A daemonless container engine with a user-facing CLI and rootless workflows.pick this instead when developers need to build and run containers directly without embedding a runtime daemon.
Docker Engine gh↗A full container engine with familiar image, network, volume, and developer workflows.pick this instead when an integrated operator and developer experience matters more than a low-level runtime layer.

What people are saying

  1. [github-trending] containerd/containerd

Sources

  1. containerd README
  2. containerd repository facts
  3. containerd v2.3.4 release
  4. containerd getting started

More self-hosted reviews

radar · sftpgo · mailcow-dockerized · openGym · BackPack · PanWatch · the whole board →