nerdctl README

The project's README from github.com/containerd/nerdctl. As one markdown file: README.md.

[⬇️ Download] [📖 Command reference] [❓FAQs & Troubleshooting] [📚 Additional documents]

nerdctl: Docker-compatible CLI for containerd

logo

nerdctl is a Docker-compatible CLI for containerd.

✅ Same UI/UX as docker

✅ Supports Docker Compose (nerdctl compose up)

✅ [Optional] Supports rootless mode, without slirp overhead (bypass4netns)

✅ [Optional] Supports lazy-pulling (Stargz, Nydus, OverlayBD)

✅ [Optional] Supports encrypted images (ocicrypt)

✅ [Optional] Supports P2P image distribution (IPFS) (*1)

✅ [Optional] Supports container image signing and verifying (cosign)

nerdctl is a non-core sub-project of containerd.

*1: P2P image distribution (IPFS) is completely optional. Your host is NOT connected to any P2P network, unless you opt in to install and run IPFS daemon.

Examples

Basic usage

To run a container with the default bridge CNI network (10.4.0.0/24):

# nerdctl run -it --rm alpine

To build an image using BuildKit:

# nerdctl build -t foo /some-dockerfile-directory
# nerdctl run -it --rm foo

To build and send output to a local directory using BuildKit:

# nerdctl build -o type=local,dest=. /some-dockerfile-directory

To run containers from docker-compose.yaml:

# nerdctl compose -f ./examples/compose-wordpress/docker-compose.yaml up

See also ./examples/compose-wordpress.

Debugging Kubernetes

To list local Kubernetes containers:

# nerdctl --namespace k8s.io ps -a

To build an image for local Kubernetes without using registry:

# nerdctl --namespace k8s.io build -t foo /some-dockerfile-directory
# kubectl apply -f - <<EOF
apiVersion: v1
kind: Pod
metadata:
  name: foo
spec:
  containers:
    - name: foo
      image: foo
      imagePullPolicy: Never
EOF

To load an image archive (docker save format or OCI format) into local Kubernetes:

# nerdctl --namespace k8s.io load < /path/to/image.tar

To read logs (experimental):

# nerdctl --namespace=k8s.io ps -a
CONTAINER ID    IMAGE                                                      COMMAND                   CREATED          STATUS    PORTS    NAMES
...
e8793b8cca8b    registry.k8s.io/coredns/coredns:v1.9.3                     "/coredns -conf /etc…"    2 minutes ago    Up                 k8s://kube-system/coredns-787d4945fb-mfx6b/coredns
...

# nerdctl --namespace=k8s.io logs -f e8793b8cca8b
[INFO] plugin/reload: Running configuration SHA512 = 591cf328cccc12bc490481273e738df59329c62c0b729d94e8b61db9961c2fa5f046dd37f1cf888b953814040d180f52594972691cd6ff41be96639138a43908
CoreDNS-1.9.3
linux/amd64, go1.18.2, 45b0a11
...

Rootless mode

To launch rootless containerd:

$ containerd-rootless-setuptool.sh install

To run a container with rootless containerd:

$ nerdctl run -d -p 8080:80 --name nginx nginx:alpine

See ./docs/rootless.md.

Install

Binaries are available here: https://github.com/containerd/nerdctl/releases

In addition to containerd, the following components should be installed:

These dependencies are included in nerdctl-full-<VERSION>-<OS>-<ARCH>.tar.gz, but not included in nerdctl-<VERSION>-<OS>-<ARCH>.tar.gz.

Brew

On Linux systems you can install nerdctl via brew:

brew install nerdctl

This is currently not supported for macOS. The section below shows how to install on macOS using brew.

macOS

Lima project provides Linux virtual machines for macOS, with built-in integration for nerdctl.

$ brew install lima
$ limactl start
$ lima nerdctl run -d --name nginx -p 127.0.0.1:8080:80 nginx:alpine

Windows

Install with Scoop:

scoop install nerdctl

Regarding compatibility, note that:

FreeBSD

See ./docs/freebsd.md.

Docker

To run containerd and nerdctl inside Docker:

docker build -t nerdctl .
docker run -it --rm --privileged nerdctl

Motivation

The goal of nerdctl is to facilitate experimenting the cutting-edge features of containerd that are not present in Docker (see below).

Note that competing with Docker is not the goal of nerdctl. Those cutting-edge features are expected to be eventually available in Docker as well.

Also, nerdctl might be potentially useful for debugging Kubernetes clusters, but it is not the primary goal.

Features present in nerdctl but not present in Docker

Major:

Minor:

Trivial:

Features implemented in nerdctl ahead of Docker

Similar tools

Developer guide

nerdctl is a containerd non-core sub-project, licensed under the Apache 2.0 license. As a containerd non-core sub-project, you will find the:

information in our containerd/project repository.

Compiling nerdctl from source

Run make && sudo make install.

See the header of go.mod for the minimum supported version of Go.

Using go install github.com/containerd/nerdctl/v2/cmd/nerdctl is possible, but unrecommended because it does not fill version strings printed in nerdctl version

Testing

See testing nerdctl.

Contributing to nerdctl

Lots of commands and flags are currently missing. Pull requests are highly welcome.

Please certify your Developer Certificate of Origin (DCO), by signing off your commit with git commit -s and with your real name.

Command reference

Moved to ./docs/command-reference.md

Additional documents

Configuration guide:

Basic features:

Advanced features:

Experimental features:

Implementation details:

Misc:

nerdctl (containerd/nerdctl)

registry
Searching Database…

10.4K ·GitHub
What is this?nerdctl is a Docker-compatible command-line client for containerd, giving you the same docker-style UI/UX while exposing containerd-specific features that Docker does not have.
Is this a replacement for the docker CLI or something that runs alongside it?It is a standalone CLI binary (nerdctl command) that talks directly to containerd, mirroring Docker's commands and flags so you can swap in commands like 'nerdctl run' or 'nerdctl compose up' instead of their docker equivalents.
How do I install and start using it?Download a prebuilt binary (full or minimal tar.gz), or install via Homebrew on Linux, Scoop on Windows, or Lima on macOS (which runs it inside a Linux VM); you can also build from source with 'make && sudo make install'.
Do I need containerd already running, or does nerdctl bring its own daemon?nerdctl is just the client; it requires a running containerd daemon (and for rootless mode, a rootless containerd instance). You can also run containerd and nerdctl together inside Docker if you don't want to install containerd separately.
Does it work the same on macOS and Windows as on Linux?Full native support is Linux-only; on macOS you need Lima to run a Linux VM, and on Windows, Linux containers work via WSL2 while native Windows container support is still experimental.
Who would actually use this instead of Docker?Developers who want to experiment with containerd's cutting-edge features (lazy-pulling, image encryption, IPFS distribution, Kubernetes container debugging) that aren't yet available in Docker, while keeping a familiar Docker-like interface.
If I don't want any P2P networking, is IPFS support forced on?No, IPFS-based image distribution is entirely opt-in; your machine isn't connected to any P2P network unless you deliberately install and run the IPFS daemon.
Can containers use a GPU through nerdctl?Yes, there is dedicated documentation for using GPUs inside containers run with nerdctl.
What containerd-exclusive features does nerdctl expose that Docker lacks?On-demand lazy image pulling via Stargz/Nydus/OverlayBD/SOCI snapshotters, image encryption/decryption with ocicrypt, cosign-based image signing/verification, accelerated rootless networking via bypass4netns, and connecting a container to multiple networks at once.
Can nerdctl help me debug Kubernetes containers?Yes, you can use nerdctl to list, build, and load images for local Kubernetes clusters and read container logs, since all Kubernetes containers live in the k8s.io containerd namespace.
How does nerdctl compare to containerd's own ctr or crictl tools?Unlike ctr and crictl, nerdctl is Docker CLI-compatible and user-friendly, supporting features like port publishing, restart policies, build, logs, and Docker Compose that ctr and crictl don't offer.
Does nerdctl support Docker Compose files?Yes, it implements 'nerdctl compose up' and related commands to run docker-compose.yaml files directly against containerd.
Creator
containerd
Size
15 MB
Stars
10.4K
Age
5y
Commits · 90 Days