containerd/containerd
Dependencies
External Go modules containerd depends on. Counts and version pins reflect the state of go.mod at the time of this wiki.
Direct dependencies — the load-bearing ones
| Module | What it does in containerd |
|---|---|
github.com/Microsoft/hcsshim |
Windows host compute system — required for Windows containers |
github.com/Microsoft/go-winio |
Windows IO and named pipe helpers |
github.com/checkpoint-restore/checkpointctl / go-criu |
criu integration for checkpoint/restore |
github.com/containerd/btrfs/v2 |
btrfs syscall wrappers |
github.com/containerd/cgroups/v3 |
Cgroup v1 and v2 wrappers |
github.com/containerd/console |
Pseudo-terminal helpers used by the shim |
github.com/containerd/containerd/api |
Self-import of the api submodule |
github.com/containerd/continuity |
Filesystem semantics helpers (used by pkg/archive) |
github.com/containerd/errdefs |
Error sentinel definitions for cross-package error contracts |
github.com/containerd/errdefs/pkg |
Error helpers |
github.com/containerd/fifo |
Named pipe wrappers used for stdio |
github.com/containerd/go-cni |
CNI client used by the CRI plugin |
github.com/containerd/go-runc |
runc invocation library used by the shim |
github.com/containerd/imgcrypt/v2 |
Encrypted image support |
github.com/containerd/log |
logrus wrapper used everywhere |
github.com/containerd/nri |
Node Resource Interface library |
github.com/containerd/otelttrpc |
OpenTelemetry instrumentation for ttrpc |
github.com/containerd/platforms |
OCI platform parsing |
github.com/containerd/plugin |
The plugin registration framework |
github.com/containerd/ttrpc |
ttrpc client/server (used for daemon↔shim) |
github.com/containerd/typeurl/v2 |
Protobuf typeurl registry |
github.com/containerd/zfs/v2 |
ZFS snapshotter dependency |
github.com/containernetworking/cni / plugins |
CNI library and plugins |
github.com/coreos/go-systemd/v22 |
systemd journal/socket integration |
github.com/distribution/reference |
OCI reference parsing (image refs) |
github.com/docker/go-events |
Event channel helpers |
github.com/docker/go-metrics |
Prometheus metrics helpers (containerd-flavored) |
github.com/docker/go-units |
Byte/duration humanizer used in ctr |
github.com/erofs/go-erofs |
EROFS filesystem support |
github.com/fsnotify/fsnotify |
Filesystem watcher (CNI conf syncer) |
github.com/google/uuid |
UUIDs |
github.com/intel/goresctrl |
Intel RDT support |
github.com/klauspost/compress |
Faster gzip/zstd |
github.com/moby/sys/* |
Mount, signal, symlink, sequential, userns helpers shared with Docker |
github.com/opencontainers/image-spec |
OCI image-spec types |
github.com/opencontainers/go-digest |
Digest type |
github.com/opencontainers/runtime-spec |
OCI runtime-spec types |
github.com/opencontainers/runtime-tools |
Runtime-spec helpers |
github.com/opencontainers/selinux |
SELinux label helpers |
github.com/pelletier/go-toml/v2 |
TOML config parser |
github.com/prometheus/client_golang |
Prometheus client library |
github.com/sirupsen/logrus |
Underlying logger |
github.com/stretchr/testify |
Test assertions |
github.com/urfave/cli/v2 |
CLI framework for containerd, ctr, etc. |
github.com/vishvananda/netlink / netns |
Network namespace helpers |
go.etcd.io/bbolt |
Embedded key/value store for the metadata plugin |
go.opentelemetry.io/otel (and several exporters/contrib packages) |
Tracing |
google.golang.org/grpc |
gRPC server and client |
google.golang.org/protobuf |
Protobuf runtime |
k8s.io/cri-api, cri-client, cri-streaming |
CRI gRPC types |
k8s.io/apimachinery, client-go, klog/v2, streaming, utils |
Kubernetes plumbing used by the CRI plugin |
tags.cncf.io/container-device-interface |
CDI device specs (GPUs, FPGAs) |
Indirect-only highlights
| Module | Notes |
|---|---|
github.com/cilium/ebpf |
Pulled in transitively for cgroup v2 and Intel RDT bits |
github.com/containers/ocicrypt |
Used by imgcrypt |
github.com/sasha-s/go-deadlock |
Deadlock detector available behind a build tag |
github.com/tetratelabs/wazero |
WASM runtime pulled in by knqyf263/go-plugin |
Why these specifically
- The
containerd/*family of packages is split out so they can be reused by sister projects (nerdctl, thecontainerd-nrifamily, etc.) without a circular dependency. - Microsoft's
hcsshimandgo-winioare required to do anything meaningful with Windows containers. - bbolt is the only persistent store; all other storage is the content store on disk.
urfave/cli/v2powers every CLI in the repo. It's pinned because of breaking changes between v2 minor versions.- The Kubernetes packages are pinned to a recent major and minor; updates are coordinated in CRI-tied PRs.
Vendoring
containerd is fully vendored under vendor/. Updating dependencies requires make vendor followed by review of go.mod/go.sum/vendor/ deltas. CI gates the change via make verify-vendor.
Built by Factory AutoWiki from public repository content. It is a generated preview for codebase exploration, not source-maintained documentation.