Podman 是什么
Podman 是一款无守护进程的容器引擎,由 Red Hat 主导开发,是 Docker 的主流替代方案。它无需常驻后台守护进程,采用 fork-exec 模型直接启动容器;默认以非 root 用户运行(Rootless),不依赖 root 权限或 docker 用户组;原生支持 Kubernetes 风格的 Pod 抽象;通过 Quadlet 实现 systemd 深度集成。
截至 2026 年 5 月,Podman 5.8 是当前主流稳定版,当前最新补丁版本为 5.8.2(2026 年 4 月 14 日发布)。Podman 6.0 测试日于 2026 年 5 月 11-15 日进行,预计随后正式发布。值得注意的架构变化:数据库后端已从 BoltDB 迁移至 SQLite,现有环境升级时会自动转换。
Podman vs Docker
| 维度 | Podman | Docker |
|---|---|---|
| 架构 | 无守护进程(fork-exec) | 客户端-服务端(dockerd) |
| 权限 | Rootless 默认,无需 root | 需 root 或加入 docker 组 |
| systemd 集成 | 原生(Quadlet 文件) | 需手动编写 unit 文件 |
| Pod 支持 | 原生 Kubernetes 风格 | 不支持(需 Swarm/Compose) |
| 攻击面 | 较低(无持久 Socket) | 较高(/var/run/docker.sock) |
| CLI 兼容 | docker → podman 别名无缝替换 | 原生 |
| 数据库后端 | SQLite(5.x+) | BoltDB |
| 守护进程 | 无 | dockerd + containerd |
版本选择与系统要求
各发行版仓库 Podman 版本
| 发行版 | 仓库版本(参考) | 说明 |
|---|---|---|
| Arch Linux | 5.8.x | 滚动更新,始终最新 |
| Fedora 41 | 5.x | 接近上游,dnf info podman 查看 |
| Ubuntu 26.04 LTS | 5.7.x | LTS 初始版本 5.7.0,安全更新持续推送 |
| Ubuntu 24.04 LTS | 4.9.x | 需 APT Pinning 获取 5.x |
| Debian 13 “Trixie” | 5.4.x | Stable 仓库,apt policy podman 查看 |
| Debian 12 “Bookworm” | 4.3.x | 需 APT Pinning 从 Trixie 拉取 |
| RHEL / Rocky / Alma 10 | 5.6.x | container-tools 模块流 |
| RHEL / Rocky / Alma 9.4+ | 5.x | AppStream 仓库 |
| openSUSE Tumbleweed | 5.8.x | 滚动更新,zypper info podman 查看 |
上表为截至 2026 年 5 月的参考版本。滚动发行版版本可能更高。建议使用以下命令直接查看当前可用版本:
- Debian / Ubuntu:
apt policy podman - RHEL / Fedora:
dnf info podman或dnf module list container-tools - Arch:
pacman -Si podman - openSUSE:
zypper info podman
推荐选择发行版官方仓库或模块流安装,确保安全补丁及时到位。
系统要求
| 组件 | 要求 | 说明 |
|---|---|---|
| 内核 | ≥ 5.2(推荐 5.8+) | cgroups v2 于 5.2 引入 |
| cgroups | v2(推荐) | Podman 在 cgroups v2 下性能和隔离最佳 |
| 存储驱动 | overlayfs(rootful) / fuse-overlayfs(rootless 后备) | fuse-overlayfs 是内核 overlay 不可用时的后备 |
| 网络 | pasta(默认 rootless)+ netavark | Podman 5.0+ 默认网络栈 |
| 数据库 | SQLite | Podman 5.x 已从 BoltDB 迁移 |
fuse-overlayfs 在无内核 overlay 支持的环境(如某些 VPS、旧内核)中是 rootless 模式正常运行的关键后备。安装 Podman 时通常作为依赖自动安装。
安装方式对比
| 方式 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| 包管理器 | 大多数 Linux 生产环境 | 自动更新、依赖管理、systemd 集成 | 旧发行版可能版本偏旧 |
| podman machine | macOS / Windows | 官方方案、自动管理 VM | 需额外资源开销 |
| 源码编译 | 需要最新特性或定制 | 完全可控 | 维护成本高、需手动处理升级 |
本文聚焦 Linux 包管理器安装。macOS / Windows 用户参见文末补充主题。
各发行版安装
Ubuntu
Ubuntu 26.04 LTS —— 官方仓库直接安装
Podman 5.7.x 已在官方仓库中,无需添加第三方 PPA:
sudo apt updatesudo apt install -y podman
# 可选配套工具sudo apt install -y podman-compose # Docker Compose 替代sudo apt install -y podman-docker # docker 命令透明别名(迁移用户推荐)sudo apt install -y buildah # 镜像构建工具sudo apt install -y skopeo # 镜像搬运工具
podman --versionUbuntu 24.04 LTS —— APT Pinning 从 26.04 拉取
Ubuntu 24.04 仓库中 Podman 停留在 4.9.x。通过 APT Pinning 从 Ubuntu 26.04 LTS(代号 resolute,2026 年 4 月 23 日发布)拉取 5.x,无需升级整个系统。
# 1. 添加 Ubuntu 26.04 LTS 源echo "deb http://archive.ubuntu.com/ubuntu resolute main universe" \ | sudo tee /etc/apt/sources.list.d/ubuntu-26.list
# 2. 设置 Pin 优先级(仅 Podman 相关包从 26.04 拉取)cat <<'EOF' | sudo tee /etc/apt/preferences.d/podman-26.prefPackage: podman buildah golang-github-containers-common crun libgpgme11t64 libgpg-error0 libsubid4 netavark passt aardvark-dns containernetworking-plugins catatonit conmon containers-storage slirp4netnsPin: release n=resolutePin-Priority: 991
Package: *Pin: release n=resolutePin-Priority: 400EOF
# 3. 安装sudo apt updatesudo apt install -y podman
# 4. 验证来源apt-cache policy podman # 应显示 resolute 为候选Ubuntu 22.04 LTS —— openSUSE Kubic OBS
22.04 官方仓库 Podman 版本过旧(3.x/4.x)。openSUSE Kubic 社区仓库提供较新的构建。注意:此方案为社区维护,无官方支持承诺。
echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_22.04/ /" \ | sudo tee /etc/apt/sources.list.d/kubic-libcontainers-stable.listcurl -fsSL "https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_22.04/Release.key" \ | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/kubic-libcontainers.gpgsudo apt updatesudo apt install -y podmanDebian
Debian 13 “Trixie” (Stable) —— 官方仓库
sudo apt updatesudo apt install -y podman安装后确认版本:
apt-cache policy podman不锁定具体小版本号——Debian Stable 在生命周期内会通过 security/update 通道推送安全修复,
5.x系列特性完整。
Debian 12 “Bookworm” —— APT Pinning 从 Trixie 拉取
Bookworm 仓库 Podman 为 4.3.x,功能较旧(无 pasta 默认集成、无 Quadlet 完善支持)。推荐从 Trixie 拉取:
# 1. 添加 Trixie 源cat <<EOF | sudo tee /etc/apt/sources.list.d/debian-trixie.sourcesTypes: debURIs: http://deb.debian.org/debianSuites: trixieComponents: mainSigned-By: /usr/share/keyrings/debian-archive-keyring.gpgEOF
# 2. 将 Trixie 默认优先级压低cat <<EOF | sudo tee /etc/apt/preferences.d/podmanPackage: *Pin: release n=trixiePin-Priority: 400EOF
# 3. 从 Trixie 安装 podmansudo apt updatesudo apt install -t trixie podmanSlirp4netns 后备
Debian 用户在 pasta 出现兼容问题时,可切换回 slirp4netns 作为网络后备:
[network]default_rootless_network_cmd = "slirp4netns"RHEL / Rocky Linux / AlmaLinux
RHEL 9.4+ / Rocky 9.4+ / Alma 9.4+ 以及 RHEL 10 / Rocky 10 / Alma 10 均通过 container-tools 模块流提供 Podman 5.x。推荐使用模块流而非 COPR 第三方仓库。
# 查看可用模块流dnf module list container-tools
# 安装(RHEL 10 / Rocky 10 直接安装即可,无需启用模块)sudo dnf install -y podman buildah skopeo
# RHEL 9 系列上如版本偏旧,可切换模块流# sudo dnf module reset container-tools# sudo dnf module install container-tools:latest安装配套工具:
sudo dnf install -y podman-compose podman-docker使用
dnf module list container-tools可查看当前可用模块流及版本。RHEL 系列上 SELinux 默认 enforcing,挂载卷时需要使用
:Z或:z标志(参见安全加固章节)。
Fedora
Fedora 与 Podman 上游开发最贴近,官方仓库始终提供最新版本:
sudo dnf install -y podman buildah skopeo podman-compose podman-dockerArch Linux
sudo pacman -Syu podman podman-docker podman-composeArch 的 [extra] 仓库始终跟踪上游最新版(当前 5.8.x),是体验最新功能的最佳选择。
openSUSE
# Tumbleweedsudo zypper install -y podman podman-compose podman-docker
# Leap(如可用)sudo zypper install -y podman安装后必要配置
1. 配置 Subordinate UID/GID 映射(Rootless 必需)
Rootless 容器依赖用户命名空间将容器内 root 映射为宿主机普通用户。大多数系统自动分配,如果未配置会在运行时报 cannot find UID/GID。
# 查看当前映射grep $USER /etc/subuid /etc/subgid
# 手动配置(如未自动分配)sudo usermod --add-subuids 100000-165535 --add-subgids 100000-165535 $USER执行后必须注销重新登录,用户命名空间映射才会生效。
2. 验证 cgroups v2
podman info | grep -i cgroupVersion# 期望输出: cgroupVersion: v2如果输出 v1,需在 /etc/default/grub 中添加 systemd.unified_cgroup_hierarchy=1 并执行 sudo update-grub 后重启。cgroups v2 是 Podman 资源限制和监控的基础。
3. 启用 Linger(容器随系统启动)
Rootless 容器在用户登出后默认停止。要让容器在系统启动时自动运行且不依赖登录会话:
sudo loginctl enable-linger $USERloginctl show-user $USER --property=Linger# 应输出: Linger=yes这是 Headless 服务器上 rootless 容器开机自启的前置条件。
4. 允许非特权端口绑定
Rootless 容器默认只能绑定 ≥1024 的端口。允许绑定低位端口:
sudo sysctl net.ipv4.ip_unprivileged_port_start=80echo "net.ipv4.ip_unprivileged_port_start=80" | sudo tee /etc/sysctl.d/99-podman-ports.conf5. 配置容器注册表短名称解析
Podman 5.x 默认要求全限定镜像名称(如 docker.io/library/nginx:latest)。配置短名称搜索注册表:
# 用户级mkdir -p ~/.config/containerscat > ~/.config/containers/registries.conf << 'EOF'unqualified-search-registries = ["docker.io", "quay.io"]EOF也可系统级配置:编辑 /etc/containers/registries.conf。
6. 开启 Podman API 服务(Docker 兼容 Socket)
Podman 提供与 Docker API 兼容的 Unix Socket,方便需要 Docker API 的工具(如 IDE 插件、docker-compose)对接:
# 用户级 Socketsystemctl --user enable --now podman.socket
# 验证podman info --format '{{.Host.RemoteSocket.Path}}'# 输出: unix:///run/user/1000/podman/podman.sock
# 设置 DOCKER_HOST 环境变量(追加到 ~/.bashrc 持久化)export DOCKER_HOST="unix:///run/user/$(id -u)/podman/podman.sock"7. 安装 podman-docker 实现 docker 命令透明别名(可选)
从 Docker 迁移的用户可安装 podman-docker 包,将 docker 命令透明映射到 podman,无需改变肌肉记忆:
# Ubuntu / Debiansudo apt install -y podman-docker
# RHEL / Rocky / Alma / Fedorasudo dnf install -y podman-docker
# Archsudo pacman -S podman-docker安装后 docker ps、docker run 等命令自动指向 Podman。也可手动设置别名:
alias docker=podman注意:
podman-docker包提供的兼容包装器不覆盖 Docker 守护进程依赖(如 Docker Desktop),它仅是 CLI 层面的透明替换。
网络配置
Podman 5.x 的默认 rootless 网络栈由两部分组成:
pasta(外部连通性,无 NAT 默认) +netavark(内部网桥、veth pair、防火墙规则) +aardvark-dns(容器名 DNS 解析)- pasta:Podman 5.0+ 默认 rootless 网络后端,替代旧的 slirp4netns。pasta 默认不做 NAT,而是将宿主机 IP 复制到容器命名空间,性能更优。
- netavark:Rust 实现的新一代网络后端,负责网桥、veth pair、防火墙规则。CNI 已弃用。
- aardvark-dns:默认 DNS 插件,自动处理容器名到 IP 的解析。同一网络下的容器可直接用容器名互相访问。
常用网络操作
# 列出网络podman network ls
# 创建自定义网络podman network create mynet
# 创建 IPv4/IPv6 双栈网络podman network create --ipv6 mynet-dual
# 运行容器并指定网络podman run -d --network mynet --name web nginx
# 容器通过 aardvark-dns 直接用名称互访podman run --rm --network mynet alpine ping -c2 webpasta 配置调整
如需让 pasta 模拟旧 slirp4netns 的 NAT 行为:
[network]pasta_options = ["-a", "10.0.2.0", "-n", "24", "-g", "10.0.2.2", "--dns-forward", "10.0.2.3"]WSL2 防火墙兼容
WSL2 内核的 nftables 不完整,可能导致 netavark 报错。修复:
[network]firewall_driver = "iptables"Quadlet:systemd 原生集成
Quadlet 是 Podman 内置的 systemd 生成器(v4.4+)。你只需编写声明式 .container 文件,systemd 在启动或 daemon-reload 时自动生成对应的 .service unit。相比旧式 podman generate systemd,Quadlet 消除了一次性 shell 命令、避免配置漂移,并支持健康检查、自动更新、secret 管理等生产特性。
目录布局
| 模式 | 搜索路径(高优先级优先) |
|---|---|
| Rootful | /run/containers/systemd/ → /etc/containers/systemd/ → /usr/share/containers/systemd/ |
| Rootless | $XDG_RUNTIME_DIR/containers/systemd/ → ~/.config/containers/systemd/ → /etc/containers/systemd/users/${UID}/ |
基础示例:Nginx
创建 ~/.config/containers/systemd/nginx.container:
[Unit]Description=Nginx Web Server (Rootless Quadlet)After=network-online.targetWants=network-online.target
[Container]ContainerName=nginx-webImage=docker.io/library/nginx:1.27-alpinePublishPort=127.0.0.1:8080:80Volume=%h/html:/usr/share/nginx/html:ZAutoUpdate=registry
[Service]Restart=alwaysRestartSec=5TimeoutStartSec=180
[Install]WantedBy=default.target启用并启动:
systemctl --user daemon-reloadsystemctl --user start nginx.servicesystemctl --user enable nginx.service服务名与文件名对应:nginx.container → nginx.service。
健康检查与自动更新
[Container]# 注意:nginx:alpine 镜像默认不含 curl,健康检查需使用 wget 或自定义镜像# 示例使用 wget 替代: HealthCmd=wget -q --spider http://localhost/ || exit 1HealthCmd=curl -f http://localhost/ || exit 1HealthInterval=30sHealthTimeout=5sHealthRetries=3HealthOnFailure=killAutoUpdate=registry启用自动更新定时器:
systemctl --user enable --now podman-auto-update.timerpodman auto-update 按定时器检查镜像仓库,发现新 digest 后自动拉取并重启容器。结合健康检查,更新失败可自动回滚。
自动更新要求使用全限定镜像名称(
docker.io/library/nginx:1.27-alpine),短名称nginx不触发检查。
podman quadlet 管理命令
Podman 5.x 内置 podman quadlet 子命令,提供更便捷的 Quadlet 文件管理:
# 将 Quadlet 文件安装到系统搜索路径podman quadlet install ~/.config/containers/systemd/nginx.container
# 列出已安装的 Quadlet 单元podman quadlet list
# 查看生成的 systemd unit 内容(dry-run)/usr/lib/systemd/user-generators/podman-user-generator --dry-runPod + 多容器组合
# webapp.pod[Pod]PublishPort=8080:80
# webapp-app.container[Container]Image=docker.io/username/app:v1Pod=webapp.pod
# webapp-redis.container[Container]Image=docker.io/library/redis:7-alpinePod=webapp.pod同一个 Pod 内的容器通过 localhost 互访(Redis 在 localhost:6379),Quadlet 自动生成 webapp-pod.service 并编排依赖。
Secrets 管理
# 创建 secretecho -n 'MyS3cret!' | podman secret create db-password -# 在 .container 中引用 —— 作为环境变量注入Secret=db-password,type=env,target=POSTGRES_PASSWORD
# 或挂载为文件Secret=db-passwordSecrets 不会出现在 podman inspect、进程列表或 unit 文件中。
Service 依赖编排
# app.container[Unit]Requires=postgres.serviceAfter=postgres.service引用已生成的 .service 名称即可编排启动顺序。
podman-compose
两种方案
| 方案 | 命令 | 特点 |
|---|---|---|
| podman-compose(Python) | podman-compose up -d | 成熟稳定、无守护进程、不需要 Socket |
| podman compose(内置) | podman compose up -d | Podman 5.x 内置、趋于成熟、未来主流 |
安装 podman-compose
# Ubuntu / Debiansudo apt install -y podman-compose
# RHEL / Rocky / Alma / Fedorasudo dnf install -y podman-compose
# pip(通用)pip3 install podman-compose基本使用
# 启动(兼容 docker-compose.yml)podman-compose -f docker-compose.yml up -d
# 查看状态podman-compose ps
# 停止podman-compose downpodman compose 内置子命令
Podman 5.x 的 podman compose 已趋于成熟,是未来主流方向:
# 启用用户 Socket 后即可使用podman compose up -dpodman compose pspodman compose down当前生产环境建议
podman-compose(Python 版)更稳定。podman compose内置子命令功能快速追赶中,日常开发使用已无障碍。
若你从 Docker 迁移且安装了 podman-docker,docker compose 也可指向 Podman 的 Socket。设置 DOCKER_HOST 后运行:
export DOCKER_HOST="unix:///run/user/$(id -u)/podman/podman.sock"docker compose up -d安全加固
1. Rootless 是默认安全边界
Rootless 容器内进程在宿主机上以普通用户身份运行。即使容器内是 root,在宿主机上仅对应受约束的 UID。这是 Podman 最重要的一层防御。
2. SELinux 卷挂载标志
# :Z —— 私有标签(仅当前容器可访问)podman run -v /host/data:/data:Z nginx
# :z —— 共享标签(多个容器共享)podman run -v /shared/config:/config:z nginxRHEL/Fedora 上 SELinux enforcing 时,省略 :Z 或 :z 会导致容器内权限拒绝,错误表现为静默失败(文件存在但读不到内容)。
3. 网络隔离
# 无网络(最严格)podman run --network none alpine
# 仅内部网络(容器间通信,无外网)podman network create --internal isolatedpodman run --network isolated alpine
# 绑定到 localhost 仅(不暴露到外部网络)podman run -p 127.0.0.1:8080:80 nginx4. Linux Capabilities 裁剪
# 移除所有 capabilities 再按需添加(最小权限原则)podman run --cap-drop=ALL --cap-add=NET_BIND_SERVICE nginx5. Podman Secrets
敏感信息(密码、API 密钥、证书)通过 secret 注入,而非写在环境变量或挂载配置文件中:
echo -n 'mypassword' | podman secret create db-pass -podman run --secret db-pass,type=env,target=POSTGRES_PASSWORD postgres6. 禁止容器内获得新权限
# 禁止通过 setuid 提权podman run --security-opt=no-new-privileges nginx常用命令速查
| 命令 | 用途 |
|---|---|
podman --version | 查看版本 |
podman info | 查看系统、存储、网络、注册表信息 |
podman search <term> | 搜索镜像 |
podman pull <image> | 拉取镜像 |
podman images | 列出本地镜像 |
podman run -d --name <name> -p <host>:<ctr> <image> | 后台运行容器 |
podman ps / podman ps -a | 查看运行中 / 所有容器 |
podman stop <name> | 停止容器 |
podman rm <name> | 删除容器 |
podman rmi <image> | 删除镜像 |
podman logs <name> | 查看容器日志 |
podman exec -it <name> bash | 进入容器 Shell |
podman inspect <name> | 查看容器/镜像详细信息 |
podman cp <name>:<path> <host> | 容器与宿主机间复制文件 |
podman system prune -af | 清理所有未使用的镜像和容器 |
podman stats | 实时资源使用统计 |
podman top <name> | 查看容器内进程 |
podman network ls / create / rm | 管理网络 |
podman volume ls / create / rm | 管理卷 |
podman secret ls / create / rm | 管理 secrets |
podman generate systemd <name> | 生成 systemd unit(旧方式) |
podman auto-update --dry-run | 模拟自动更新 |
journalctl --user -u <service>.service -f | 实时查看 Quadlet 管理容器的日志 |
常见问题排查
Error: cannot find UID/GID for user
原因:未配置 subordinate UID/GID 映射。
解决:
sudo usermod --add-subuids 100000-165535 --add-subgids 100000-165535 $USER# 注销后重新登录短名称镜像拉取失败
Error: short-name "nginx" did not resolve to an alias and no unqualified-search registries are defined原因:Podman 5.x 默认要求全限定镜像名。
解决:使用 docker.io/library/nginx:latest 或配置 registries.conf(见上文安装后配置第 5 项)。
BoltDB → SQLite 自动迁移失败
原因:Podman 5.x 升级时数据库自动迁移可能因权限或存储损坏中断。
排查:
# 查看错误日志journalctl --user -u podman --no-pager | grep -i "boltdb\|sqlite\|migration"
# 检查旧 BoltDB 文件(确认数据量)ls -lh ~/.local/share/containers/storage/libpod/bolt_state.db
# 检查新 SQLite 数据库状态podman system info | grep -i database手动迁移:
# 手动强制迁移数据库(首选尝试)podman system migrate --migrate-db如果此命令失败,再执行备份重置步骤:
# 备份cp -r ~/.local/share/containers ~/.local/share/containers.backup# 重置存储(注意:删除所有本地镜像、容器、卷)podman system reset# 重新拉取镜像pasta 网络不通
症状:容器启动后无法访问外网。
排查:
# 确认 pasta 在运行ps aux | grep pasta
# 测试容器内连通性podman run --rm alpine ping -c2 8.8.8.8
# 确认防火墙未拦截sudo nft list ruleset临时回退到 slirp4netns:
[network]default_rootless_network_cmd = "slirp4netns"端口 < 1024 绑定失败
Error: rootlessport cannot expose privileged port 80解决:
sudo sysctl net.ipv4.ip_unprivileged_port_start=80SELinux 阻止卷挂载(RHEL/Fedora)
症状:容器内 ls /data 显示权限拒绝或空目录。
解决:卷挂载时添加 :Z(私有)或 :z(共享)标志。
podman run 后在宿主机上看不到端口监听
原因:Rootless 容器端口绑定不走宿主机 netstat,由 pasta/netavark 在用户命名空间中代理。
验证:
podman port <container_name>curl http://localhost:<mapped_port>补充主题
Podman 在 macOS / Windows 上(podman machine)
podman machine 是官方跨平台方案,在轻量级 Linux VM 内运行 Podman:
# macOSbrew install podmanpodman machine initpodman machine start
# Windows(PowerShell)winget install RedHat.Podmanpodman machine initpodman machine start之后 podman 命令从宿主机透明转发到 VM 内执行。
从 Kubernetes YAML 部署(podman kube play)
# 从 Kubernetes YAML 创建 Podpodman kube play deployment.yaml
# 生成 systemd 服务(结合 Quadlet)podman kube play --service-container=true deployment.yaml容器存储与卷管理进阶
# 创建命名卷podman volume create app-data
# 使用命名卷podman run -v app-data:/data nginx
# 查看卷详情podman volume inspect app-data命名卷由 Podman 管理其生命周期和存储路径,比宿主机路径挂载更便携。
存储驱动选择:
[storage]driver = "overlay" # rootful 首选# driver = "fuse-overlayfs" # rootless 后备
[storage.options.overlay]mount_program = "/usr/bin/fuse-overlayfs"SELinux 标志速查:
| 标志 | 含义 | 使用场景 |
|---|---|---|
:Z | 私有标签 | 单个容器独占的卷 |
:z | 共享标签 | 多个容器共享的卷(如配置目录) |
性能调优建议
# 使用 crun 运行时(C 语言实现,比 runc 更轻量)sudo dnf install -y crun[engine]runtime = "crun"
# 限制容器 pid 数量(防 fork 炸弹)podman run --pids-limit=100 nginx
# 常用性能数据podman stats --no-streamcrun 是 Red Hat 主导的 OCI 运行时,内存占用更小,启动更快,与 Podman 配合最紧密。
总结:上线检查清单
-
podman info确认 cgroups v2 和 overlay 存储驱动 -
/etc/subuid和/etc/subgid已配置,注销重登录后生效 -
loginctl enable-linger已为服务用户开启 -
registries.conf短名称搜索注册表已配置 -
podman run --rm docker.io/library/hello-worldrootless 拉取运行正常 - 生产容器使用全限定镜像名 + 固定版本 Tag
- 容器已迁移到 Quadlet 管理,
systemctl --user enable开机自启 - 健康检查和自动更新已配置(适当时)
- SELinux 卷挂载添加了
:Z/:z - 敏感信息通过
podman secret注入 - 网络默认策略最小化(仅暴露必要端口,绑定 localhost 优先)