What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

iTechGuides is reader-supported. When you buy through links on our site, we may earn an affiliate commission. As an Amazon Associate I earn from qualifying purchases. Learn more

Rootless Docker runs the Docker daemon and its containers without host root privileges, inside a Linux user namespace. That is the short answer. The harder part is that “root” means two different things in this context: the privileged account on the host, and the identity a process sees inside a container. Rootless mode changes the first one. It does not make the second one harmless, and it does not make Docker access safe by default.

Two meanings of “root”

The host’s root account is user ID 0 (UID 0) on the machine itself. It can read and write nearly any file, load kernel modules, and manage other users. A container’s root user is also UID 0, but inside a separate set of namespaces. Whether that inner UID 0 can do anything meaningful on the host depends on how the runtime maps it.

Those two identities are why the title’s question matters. A standard Docker installation runs the daemon as host root, so a compromised daemon is a compromised host. Rootless mode asks a different question: what if the daemon and its containers are not host root at all? The answer is that the daemon runs as an ordinary user, and the containers run inside a user namespace that maps their UID 0 to that ordinary user on the host.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Rootless mode and userns-remap are different controls

Docker offers two approaches that are often confused. Docker’s Rootless mode runs the daemon itself without host root privileges. The older userns-remap setting keeps the daemon running as root but remaps container identities to a range of unprivileged host IDs. The table below sets out the differences that matter when you choose between them.

Aspect Rootless mode userns-remap
Daemon privilege Runs without host root privileges Daemon still runs as root
Container UID 0 maps to The host UID of the user running Docker The first subordinate UID assigned to the remap user
Other container UIDs Map into the user’s subordinate ID range Map into the remap user’s subordinate range
Host prerequisites newuidmap and newgidmap, plus at least 65,536 subordinate UIDs and GIDs for the user Not covered in this article; see Docker’s userns-remap documentation for its requirements
Main limitation to check Storage, cgroup, networking, and feature restrictions (see below) Ownership and permission changes on mounted host data

If your main goal is to keep the daemon itself off host root, only Rootless mode addresses that. If you only need container processes to avoid host UID 0, userns-remap may be enough, but the daemon remains a root-level component.

What container root looks like on the host

In Rootless mode, a process running as root inside the container appears on the host as your own user. Files it creates on bind-mounted directories are therefore owned by your account on the host. Processes that run inside the container under other UIDs map into the subordinate ID range that your account was granted, so they appear on the host as unfamiliar numeric owners.

This is the practical source of ownership surprises. For example, a directory owned by your host user with mode 755 that you bind-mount into a container appears writable by the container’s root, because that root maps to you. A file that a container process writes as a non-root UID may show up on the host with a numeric owner that does not match any local account. Plan your bind mounts with these mappings in mind, rather than assuming the host and container see the same owners.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Setting up Rootless Docker on Linux

The steps below follow Docker’s documented installation path. Run them as the non-root user who will own the daemon.

  1. Confirm that newuidmap and newgidmap are installed, and that your user has at least 65,536 subordinate UIDs and GIDs listed in /etc/subuid and /etc/subgid.
  2. If your distribution package provides it, run dockerd-rootless-setuptool.sh install. Docker says this creates a user-level systemd service and a rootless CLI context.
  3. Check whether a system-wide Docker service is also running. Disable it, or make sure you know which daemon your client talks to. Running two daemons makes it easy to operate on the wrong one.
  4. Confirm the active context with docker context ls and switch to the rootless context if needed with docker context use rootless. Then run docker info and look for rootless in the Security Options section. Do not assume the CLI is connected to the daemon you intended.
  5. Manage the daemon with systemctl --user status docker and systemctl --user restart docker.
  6. If the daemon must start without an active login session, enable lingering for your account with loginctl enable-linger followed by your username.

The Rootless daemon reads its configuration from ~/.config/docker/daemon.json, and Docker places its per-user data and config paths under your home directory. Resource limits through cgroups work only when the host uses cgroup v2 and systemd. On a host without those, containers will run, but the limits you set may not be enforced.

Compatibility checks before you commit

Rootless mode is not a drop-in replacement for the standard daemon. Docker’s troubleshooting documentation lists the following storage-driver requirements. Check them against your kernel before you choose a driver.

Storage driver Requirement stated in Docker’s troubleshooting documentation
overlay2 Kernel 5.11 or later
fuse-overlayfs Kernel 4.18 or later, and the fuse-overlayfs utility installed
btrfs Kernel 4.18 or later, or the mount option named in the same documentation
vfs Listed as supported; no kernel minimum is given in the same section

The same documentation lists features that Rootless mode does not support. Plan around these before you rely on the setup:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
  • AppArmor integration
  • Checkpoint and restore
  • Overlay networking
  • SCTP port exposure
  • Resource limits through cgroups, unless the host provides cgroup v2 and systemd

Networking behaves differently as well. Docker’s troubleshooting page states that user-mode TCP/IP networking is generally slower than kernel networking, and that performance varies by driver. The page also describes a host-network limitation that it labels historical until Docker Engine v29.5. Do not carry older generic advice about --network=host into a Rootless setup without checking that version note against your Engine release.

Best Value
Docker Container Linux Devops Programming Coding T-Shirt
  • Docker, Docker Swarm, Docker Compose, Programmer, Developer, Coding, Programming, Software Engineer, Code, DevOps, Deploy, Deployment, Kubernetes, Salt, Puppet, Chef, Terraform, Container, AWS, Azure, Cloud, Geek, Funny, Computer, Software, Tech, IT
  • Integration, Scrum, Compile, Compilation, Science, Bug, Debug, Python, Linux, Java, Javascript, Scala, Dotnet, Kotlin
  • Lightweight, Classic fit, Double-needle sleeve and bottom hem

Docker’s version 29 release notes mention RootlessKit v3.0.2 and security fixes. Those notes are release-specific, so confirm which Engine and RootlessKit versions your host is running rather than assuming the current release notes describe your installation.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Reduced daemon privilege is not a reason to loosen access

Docker’s documentation is direct on this point: control of the daemon is powerful, because the daemon can mount host paths into containers. Rootless mode changes what that power is worth. A Rootless daemon runs as your user, so a process that controls its socket can do what your account can do, not what host root can do. That bounds the damage, but it does not make the socket harmless. Anything your user can read or write on the host can be reached through a bind mount.

In practice, treat the Rootless daemon socket as a privileged interface. Keep the socket’s directory permissions tight, avoid mounting sensitive paths such as your SSH keys or password stores, and do not present Rootless mode to colleagues or users as a complete security boundary. It is one layer in a larger setup.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Docker Desktop for Linux is a separate design

Docker Desktop for Linux runs Docker inside a virtual machine. Docker’s FAQ for that product explains the choice as a product-specific decision. It is Docker Desktop’s rationale, not a general verdict on Rootless Docker or on Linux user namespaces. If you run the Docker Engine directly on Linux, the Rootless and userns-remap options described above apply, and Desktop’s VM design does not change them.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.