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

Switching from Docker to Podman is not, by itself, a security upgrade. The more consequential change is running the engine and its containers without host-root privileges. Both Docker and Podman support rootless operation, so compare the configurations you actually run—not just the names of the tools.

What rootless operation changes

In Docker rootless mode, both the daemon and containers run as a non-root user inside a user namespace. Docker describes this as a way to mitigate potential vulnerabilities in the daemon and container runtime. That differs from Docker’s userns-remap mode: with remapping, the daemon still runs with root privileges. Docker’s rootless-mode documentation explains the distinction.

Podman’s rootless mode also uses a user namespace, with subordinate user and group ID ranges. The Podman documentation says a regular user’s containers are not visible to other users and are not managed by Podman running as root. In the project’s rootless tutorial, Podman states: “Rootless Podman is not, and will never be, root; it’s not a setuid binary, and gains no privileges when it runs.”

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

These boundaries can reduce the host privileges available to a compromised engine or container, but they do not prevent every container escape or make a workload safe by default. The cited documentation describes privilege boundaries and operational constraints, not a comparative security benchmark showing that one engine is universally safer.

What to compare before choosing an engine

Area What to verify
Host privilege Whether the daemon or runtime requires root. Compare Docker rootless with Podman rootless, rather than comparing Podman with a root-running Docker daemon.
Identity and files How container UIDs and GIDs map to host identities, and whether bind-mounted files remain readable and writable. See Docker’s UID/GID mapping guide and Podman’s rootless tutorial.
Networking Which user-mode network helper is available and whether the workload needs particular port behavior, source addresses, or host networking. Podman documents pasta in its rootless-mode documentation; Docker lists version- and configuration-dependent networking behavior in its troubleshooting guide.
Storage and platform Kernel, storage driver, cgroup setup, and whether the rootless storage location is on a supported local filesystem. Consult the Podman documentation and Docker troubleshooting guidance for the target system.
Operations How the user service starts, whether it needs to survive logout or start at boot, and how workloads are managed in your environment. Docker documents a user systemd service and the use of lingering in its rootless-mode setup instructions.

Check rootless prerequisites before migrating

Docker rootless requirements

Docker’s current setup documentation lists newuidmap and newgidmap on the host, along with at least 65,536 subordinate UIDs and GIDs assigned to the user. Its setup tool installs a user service and a CLI context. The documentation’s example uses loginctl enable-linger to allow the service to run at system startup. Follow the instructions for the Docker Engine version and Linux distribution you intend to use; see Docker’s rootless-mode guide.

Podman rootless requirements

Podman requires the user to be represented in /etc/subuid and /etc/subgid. Rootless images and containers are stored in the user’s XDG data directory or ~/.local/share/containers/storage, rather than the root-run storage. The documentation describes pasta as a networking helper needed to create a network device. Check the Podman rootless documentation for the setup applicable to your system.

There are edge cases in constrained environments. Podman describes a single-UID exception for some HPC setups using ignore_chown_errors, but warns that this workaround can cause container issues. It is not a general replacement for correctly configured subordinate ID ranges.

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

Storage, kernel, and filesystem limits

Podman’s documentation says rootless OverlayFS is unsupported on kernels earlier than 5.12.9 and recommends fuse-overlayfs where needed for user-namespace storage. It also says NFS and other distributed filesystems are not supported as the rootless graphroot. A home directory may be on NFS if the graphroot is redirected to local storage. Confirm the storage driver, kernel, cgroup mode, and graphroot location against the Podman documentation.

Docker’s rootless troubleshooting documentation also lists storage-driver and cgroup requirements, unsupported features, privileged-port configuration, networking behavior, and capabilities that apply only to resources governed by the container user namespace. Some constraints change with Engine versions; for example, the page describes a historical host-network limitation through Engine v29.5. Check the current troubleshooting page for the exact version you plan to deploy instead of treating old limitations as timeless.

Understand UID/GID mapping before mounting data

“Root” inside a rootless container is not host root: it maps to an unprivileged host identity. The mapping determines which host identity owns or can access files created through bind mounts, so a container that starts successfully can still encounter permission errors when it reads or writes mounted data.

Podman documents --userns=keep-id as an option for mapping the current user’s identity inside the container. It can help when a workload needs to operate on files owned by the invoking user, but the appropriate mapping depends on the application and its expected container identity. Test actual read, write, and ownership behavior with the directories your workload uses; consult the Podman tutorial and Docker UID/GID mapping guide.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Use a migration checklist, not a blanket security claim

  1. Inventory dependencies. List bind mounts, required UID/GID ownership, ports, networking assumptions, storage paths, cgroup needs, and any capability or privileged-operation requirements.
  2. Verify the host setup. Confirm subordinate ID ranges and helper programs, then check the kernel, cgroup environment, storage driver, and filesystem location against the relevant engine documentation.
  3. Run the workload rootless. Test with the intended user and service configuration, including startup after logout or at boot if that matters for your deployment.
  4. Exercise real data and network paths. Test mounted-file permissions, listening ports, source-address expectations, and any host-network behavior your service depends on.
  5. Review what remains privileged. Identify host-level services, devices, or resources outside the container user namespace that still require special access. Rootless operation changes the privilege boundary; it does not remove every risk or compatibility constraint.

If Docker’s rootless mode meets the workload’s needs, switching engines may not add the security change you are seeking. If Podman fits your operational preferences, rootless Podman can provide an unprivileged-user workflow as well. In either case, the meaningful comparison is the actual privilege, identity, networking, storage, and service configuration.

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.