podman替代docker实现无守护进程运行,关键是放弃dockerd中心化守护进程、改由用户进程直接启动容器,默认以当前用户身份执行并天然支持rootless模式;需验证.host.userspacecontainer为true,检查slirp4netns/fuse-overlayfs、内核user_namespaces及subuid/subgid映射,存储路径为$home/.local/share/containers/storage,挂载需podman unshare或加安全选项,gpu需配置nvidia运行时。

Podman 替代 Docker 实现无守护进程运行,关键不是“换命令”,而是放弃 dockerd 这个中心化守护进程,让容器直接由用户进程启动。它不依赖后台服务,所有操作默认以当前用户身份执行,天然支持无根(rootless)模式。
安装后确认 rootless 已启用
Podman 默认就是 rootless 的,但部分系统安装后仍可能回退到 root 模式。验证方式很简单:
- 运行
podman info --format '{{.Host.UserspaceContainer}}' - 输出 true 表示已启用用户空间容器(即 rootless)
- 若为 false 或报错,需检查:
— 是否装了slirp4netns和fuse-overlayfs(rootless 必备)
— 内核是否开启user_namespaces(Ubuntu/Debian 通常默认开;RHEL/CentOS 可执行sudo sysctl user.max_user_namespaces=10000)
— 用户在/etc/subuid和/etc/subgid中是否有足够 ID 映射(例如youruser:100000:65536)
存储路径与空间问题
rootless 模式下,所有镜像、容器、卷都存放在:
$HOME/.local/share/containers/storage
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
这个路径常位于 /home 分区,容易因空间不足或 SELinux 策略导致 “no space left on device” 报错——实际磁盘未必满,而是配额或标签限制。解决方法:
- 用
podman info --format '{{.Store.GraphRoot}}'确认真实路径 - 清理当前用户数据:
podman system prune -a(不会影响 root 用户) - 临时绕过 SELinux:启动时加
--security-opt label=disable - 如确需更大空间且接受安全折损,可用
sudo podman切换到/var/lib/containers
挂载宿主机目录和设备
rootless 默认禁止 bind mount,防止越权访问。要挂载本地目录(如配置、缓存),有两种可靠方式:
- 先执行
podman unshare echo "ready",成功后再做-v /host/path:/container/path - 或启动时显式加安全选项:
--security-opt no-new-privileges:true或--security-opt label=disable - GPU 支持需额外步骤:
— 执行sudo nvidia-ctk runtime configure --runtime=podman
— 启动时指定设备:--device /dev/nvidia0 --device /dev/nvidiactl --device /dev/nvidia-uvm
命令兼容性与日常使用
绝大多数 Docker 命令可直接替换 docker 为 podman 使用,比如:
podman pull nginx:alpinepodman run -d -p 8080:80 --name web nginx:alpine-
podman logs web、podman exec -it web sh
无需改脚本,也不用启守护进程。唯一要注意的是:没有 docker-compose 原生支持,需用 podman-compose 或 Podman 的 pod + systemd 单元替代。










