Files
containerd/docs/snapshotters
Gao Xiang 971915797a erofs-snapshotter: force the use of loop devices for single-layer images
Currently, containerd cannot dynamically select between EROFS block
or file-based mounting approaches based on the specific runtime (or
the Linux kernel version of the runtime) due to its static mount
structure.

For example, the EROFS snapshotter fails on Linux 5.4 (Ubuntu 20.04)
with `bin/nerdctl run --net=host --snapshotter=erofs busybox:latest`:

FATA[0005] failed to mount {Type:erofs Source:/var/lib/containerd/
io.containerd.snapshotter.v1.erofs/snapshots/1/layer.erofs Target:
Options:[ro]} on "/tmp/initialC1374142795": block device required

Temporarily fix this by appending `-oloop` for single-layer images.
The upcoming mount manager will make it better [1].

[1] https://github.com/containerd/containerd/issues/11303
Signed-off-by: Gao Xiang <hsiangkao@linux.alibaba.com>
2025-03-04 17:07:01 +08:00
..
2022-07-11 15:49:54 +00:00
2025-01-13 16:31:21 +08:00

Snapshotters

Snapshotters manage the snapshots of the container filesystems.

The available snapshotters can be inspected by running ctr plugins ls or nerdctl info.

Core snapshotter plugins

Generic:

  • overlayfs (default): OverlayFS. This driver is akin to Docker/Moby's "overlay2" storage driver, but containerd's implementation is not called "overlay2".
  • native: Native file copying driver. Akin to Docker/Moby's "vfs" driver.

Block-based:

  • blockfile: A driver using raw block files for each snapshot. Block files are copied from a parent or base empty block file. Mounting requires a virtual machine or support for loopback mounts.
  • devmapper: ext4/xfs device mapper. See devmapper.md.

Filesystem-specific:

  • btrfs: btrfs. Needs the plugin root (/var/lib/containerd/io.containerd.snapshotter.v1.btrfs) to be mounted as btrfs.
  • zfs: ZFS. Needs the plugin root (/var/lib/containerd/io.containerd.snapshotter.v1.zfs) to be mounted as ZFS. See also https://github.com/containerd/zfs .
  • erofs: EROFS. OverlayFS kernel module needs to be enabled for active snapshots. See also erofs.md.

Deprecated:

Non-core snapshotter plugins

Mount target

Mounts can optionally specify a target to describe submounts in the container's rootfs. For example, if the snapshotter wishes to bind mount to a subdirectory ontop of an overlayfs mount, they can return the following mounts:

[
    {
        "type": "overlay",
        "source": "overlay",
        "options": [
            "workdir=...",
            "upperdir=...",
            "lowerdir=..."
        ]
    },
    {
        "type": "bind",
        "source": "/path/on/host",
        "target": "/path/inside/container",
        "options": [
            "ro",
            "rbind"
        ]
    }
]

However, the mountpoint /path/inside/container needs to exist for the bind mount, so one of the previous mounts must be responsible for providing that directory in the rootfs. In this case, one of the lower dirs of the overlay has that directory to enable the bind mount.