Skip to content

Release 0.79#

2026-08-21 ยท Full Changelog

Named and anonymous volumes#

Node definitions can now use volumes for Docker- or Podman-managed named and anonymous volumes. Host paths remain configured with binds.

Volume entries use the familiar short syntax and support ro, rw, nocopy, and volume-nocopy options. They can be inherited from defaults, kinds, and groups, with node-level values taking precedence for the same destination.

topology:
  nodes:
    app:
      kind: linux
      volumes:
        - shared-data:/srv/shared:ro
        - /var/lib/app

Thanks @mzagozen #3335

Podman runtime updates#

Containerlab's Podman integration is updated to Podman v6. It now supports network-mode: none, preserves an image's default entrypoint and cmd when those options are not set in the topology, and retries transient management-network removal failures during destroy.

Thanks @orrious @lopster568 #3278 #3279 #3292 #3337

Configurable node hostnames#

The new hostname setting controls the hostname configured inside a node container. It follows the standard node, group, kind, and defaults inheritance order and defaults to the topology node name. Changing a resolved hostname is detected as configuration drift by deploy/apply, so only the affected node is recreated.

topology:
  nodes:
    app1:
      kind: linux
      hostname: app-production-01001

Thanks @orrious #3281

Parent cgroups for nodes#

The cgroup-parent setting places node containers under a specified parent cgroup in Docker or Podman. It supports the same inheritance levels as other node settings and is independent of cgroupns-mode.

topology:
  groups:
    leaves:
      cgroup-parent: /xform/my-lab/leaves
  nodes:
    leaf1:
      group: leaves

Thanks @jbemmel #3325

Consistent VM resource configuration#

VM-based node kinds now use the standard QEMU_SMP and QEMU_MEMORY environment variables for CPU and memory overrides. The per-kind legacy VCPU, RAM, --vcpu, and --ram settings have been removed in favor of the common vrnetlab resource configuration.

SONiC startup MAC address#

VM-based SONiC startup configurations can use the {{ .MacAddress }} template variable to write the generated management MAC into config_db.json. Containerlab uses the same address for the node's management interface.

{
  "DEVICE_METADATA": {
    "localhost": {
      "mac": "{{ .MacAddress }}"
    }
  }
}

Nix package#

The new flake.nix provides reproducible containerlab packages for x86_64-linux and aarch64-linux, a NixOS module, and a development shell with Go, gopls, and golangci-lint.

Build containerlab from a checkout with:

nix build .#containerlab

The flake is validated and refreshed automatically in CI.

Thanks @evilmonkey19 #3311

Miscellaneous#

  • Generated TLS CA files can be bind-mounted with __clabDir__/.tls/ca before nodes start. See binds. #3327
  • Magic variables are now expanded in stage exec commands separately for each node, whether the command runs on the host or in the container. #3328
  • Execution logs retain command insertion order, including commands run across nodes with dependencies, instead of depending on map iteration order. #3333
  • Containerlab now uses Go 1.26. #3343