Podman 无根容器部署指南:不用 sudo 也能跑 Docker

概述

Docker 越来越重,而且必须用 root 权限运行,这对安全性和资源占用都是个问题。Podman 是一个无守护进程的容器引擎,支持完全无 root 运行,兼容 Docker 镜像,命令也几乎一样。很多 AI 工具现在都支持 Podman 部署。

这篇教程带你从零在 Ubuntu/Debian VPS 上装好 Podman,跑通一个 Nginx 容器,让你体验不用 sudo 的容器生活。

准备工作

你需要以下条件:

  • 一台 Linux VPS(Ubuntu 22.04+ 或 Debian 12+)
  • SSH 登录权限
  • 至少 2GB 内存和 10GB 磁盘空间
  • 普通用户账户(不要直接用 root)
  • 约 50MB 磁盘空间用于安装 Podman

步骤

第一步:安装 Podman

Ubuntu 22.04 及更高版本自带 Podman 3.x,Debian 12 自带 Podman 4.x。直接装就行:

sudo apt update
sudo apt install -y podman

如果你用的 Ubuntu 20.04 或较旧版本,需要先加 PPA:

sudo apt install -y software-properties-common
sudo add-apt-repository -y ppa:podman/stable
sudo apt update
sudo apt install -y podman

安装完成后检查版本:

podman --version

看到类似 podman version 4.x.x 的输出就说明装好了。

第二步:配置无根容器

Podman 默认就是无根的,但需要做一些底层配置才能正常工作:

# 设置用户存储路径
echo "storage-driver = \"overlay\"" >> ~/.config/containers/storage.conf

# 创建必要的目录
mkdir -p ~/.local/share/containers

接下来配置 fuse-overlayfs(无根容器需要它来模拟 overlay 文件系统):

sudo apt install -y fuse-overlayfs

验证配置是否生效:

podman info | grep graphDriverName

输出应该是 graphDriverName: overlay

第三步:拉取第一个镜像

用 Podman 拉取镜像的命令和 Docker 一模一样:

podman pull docker.io/library/nginx:alpine

拉取完成后看看本地有哪些镜像:

podman images

你会看到一个 nginx:alpine 的镜像,体积很小,只有十几 MB。

第四步:运行容器

启动一个 Nginx 容器,把宿主机的 8080 端口映射到容器的 80 端口:

podman run -d --name web-server -p 8080:80 nginx:alpine

参数说明:

  • -d:后台运行
  • --name:给容器起个名字
  • -p:端口映射,格式是 宿主机端口:容器端口

查看运行中的容器:

podman ps

第五步:测试容器是否正常工作

用 curl 访问本地 8080 端口:

curl http://localhost:8080

如果看到 Nginx 的欢迎页面 HTML,说明容器跑起来了。你也可以在浏览器里打开 http://你的IP:8080 查看。

第六步:常用管理命令

Podman 的命令和 Docker 高度兼容:

# 查看容器日志
podman logs web-server

# 进入容器内部
podman exec -it web-server /bin/sh

# 停止容器
podman stop web-server

# 启动容器
podman start web-server

# 删除容器
podman rm -f web-server

# 删除镜像
podman rmi nginx:alpine

还有一个很实用的功能——把 Podman 容器转换成 systemd 服务,这样开机自动启动:

# 生成 systemd 服务文件
podman generate systemd --new --files --name web-server

# 复制到用户服务目录
cp container-web-server.service ~/.config/systemd/user/

# 启用并启动服务
systemctl --user enable container-web-server.service
systemctl --user start container-web-server.service

以后容器就会随系统自动启动了,不用手动管理。

验证

完成以上步骤后,跑一遍完整检查:

# 1. 检查 Podman 版本
podman --version

# 2. 检查存储驱动
podman info | grep graphDriverName

# 3. 检查运行中的容器
podman ps

# 4. 检查本地镜像
podman images

# 5. 测试容器可访问性
curl -s -o /dev/null -w "%{http_code}" http://localhost:8080

最后一条命令应该输出 200,表示 Nginx 容器正常响应 HTTP 请求。

常见问题

问:Podman 和 Docker 能同时装吗?

可以。它们互不冲突。Podman 不需要守护进程,Docker 需要。两个可以共存,命令也几乎一样。

问:podman run 报错 “rootless” 怎么办?

通常是 fuse-overlayfs 没装好。检查一下:

which fuse-overlayfs
fuse-overlayfs --version

如果没有安装,执行 sudo apt install -y fuse-overlayfs

问:Podman 支持 Compose 吗?

支持。Podman 4.0+ 内置了 compose 子命令:

podman compose up -d

用法和 docker compose 一样。

问:怎么把 Docker 命令换成 Podman?

最简单的方式是建个别名:

echo "alias docker=podman" >> ~/.bashrc
source ~/.bashrc

这样你敲 docker run 实际执行的是 podman run,无缝切换。

问:Podman 适合生产环境吗?

完全可以。Red Hat 全家桶都在用 Podman。很多 AI 工具部署场景下,Podman 比 Docker 更安全,因为不需要 root 权限。


Podman 是目前最轻量的容器运行时之一。不用装守护进程、不用 root 权限、和 Docker 命令兼容,换过来只用一分钟。试试看,说不定你会爱上这种无根容器的方式。

你的 VPS 上跑过哪些容器?用什么工具管理的?来聊聊。

这篇文章对你有帮助吗?