Forum Discussion

vdivizinschi's avatar
vdivizinschi
Icon for Microsoft rankMicrosoft
Mar 23, 2026

Docker Engine v29 on Linux: Why data-root No Longer Prevents OS Disk Growth (and How to Fix It)

Scope

Applies to Linux hosts only

Does not apply to Windows or Docker Desktop

Problem Summary

After upgrading to Docker Engine v29 or reimaging Linux nodes with this version, you may observe unexpected growth on the OS disk, even when Docker is configured with a custom data-root pointing to a mounted data disk.

This commonly affects cloud environments (VMSS, Azure Batch, self‑managed Linux VMs) where the OS disk is intentionally kept small and container data is expected to reside on a separate data disk.

What Changed in Docker Engine v29 (Linux)

Starting with Docker Engine 29.0, containerd’s image store becomes the default storage backend on fresh installations.

Docker explicitly documents this behavior:

“The containerd image store is the default storage backend for Docker Engine 29.0 and later on fresh installations.”
Docker containerd image store documentation

Key points on Linux:

  • Docker now delegates image and snapshot storage to containerd
  • containerd uses its own content store and snapshotters
  • Docker’s traditional data-root setting no longer controls all container storage

Docker Engine v29 was released on 11 November 2025, and this behavior is by design, not a regression.

Where Disk Usage Goes on Linux

Docker’s daemon documentation clarifies the split:

  • Legacy storage (pre‑v29 or upgraded installs):
    • All data under /var/lib/docker
  • Docker Engine v29 (containerd image store enabled):
    • Images & snapshots → /var/lib/containerd
    • Other Docker data (volumes, configs, metadata) → /var/lib/docker

Crucially:

“The data-root option does not affect image and container data stored in /var/lib/containerd when using the containerd image store.”
Docker daemon data directory documentation

This explains why OS disk usage continues to grow even when data-root is set to a data disk.

Why the Old Configuration Worked Before

On earlier Docker versions, Docker fully managed image and snapshot storage. Configuring:

{

"data-root": "/mnt/docker-data"

}

 

Was sufficient to redirect all container storage off the OS disk.

With Docker Engine v29:

  • containerd owns image and snapshot storage
  • data-root only affects Docker‑managed data
  • OS disk growth after upgrades or reimages is expected behavior

This aligns fully with Docker’s documented design changes.

Linux Workaround: Redirect containerd Storage

To restore the intended behavior on Linux, keeping both Docker and containerd storage on the mounted data disk, containerd’s storage path must also be redirected.

A practical workaround is to relocate /var/lib/containerd using a symbolic link.

Example (Linux)

sudo systemctl stop docker.socket docker containerd || true;

sudo mkdir -p /mnt/docker-data /mnt/containerd;

sudo rm -rf /var/lib/containerd;

sudo ln -s /mnt/containerd /var/lib/containerd;

echo "{\"data-root\": \"/mnt/docker-data\"}" | sudo tee /etc/docker/daemon.json;

sudo systemctl daemon-reload;

sudo systemctl start containerd docker'

What This Does

  • Stops Docker and containerd
  • Creates container storage directories on the mounted data disk
  • Redirects /var/lib/containerd → /mnt/containerd
  • Keeps Docker’s data-root at /mnt/docker-data
  • Restarts services with a unified storage layout

This workaround is effective because it explicitly accounts for containerd‑managed paths introduced in Docker Engine v29, restoring the behavior that existed prior to the change.

Key Takeaways

  • Docker Engine v29 introduces a fundamental storage architecture change on Linux
  • data-root alone is no longer sufficient
  • OS disk growth after upgrades or reimages is expected
  • containerd storage must also be redirected
  • The workaround aligns with Docker’s official documentation and design

References

  • Docker daemon data directory
    https://docs.docker.com/engine/daemon/
  • containerd image store (Docker Engine v29)
    https://docs.docker.com/engine/storage/containerd/
  • Docker Engine v29 release notes
    https://docs.docker.com/engine/release-notes/29/
No RepliesBe the first to reply