Podman 6.0.0 升级笔记:cgroups v1、CNI、iptables、slirp4netns 全部移除
2026-06-25 发布。项目已迁移到 CNCF 所属的 GitHub 组织,Go 导入路径变为 go.podman.io/podman/v6。
- Release notes:
- LWN:
这个版本不是常规迭代,升级前需要先处理一批底层依赖的移除。
破坏性变更
cgroups v1 移除。Podman 现在严格要求 cgroups v2,rootless 下的资源委派与管理随之调整。升级前用 stat -fc %T /sys/fs/cgroup 确认返回 cgroup2fs。
slirp4netns 移除。Pasta(5.0 起已是默认)成为唯一的 rootless 网络栈。只被 slirp4netns 使用的全局选项 --network-cmd-path 一并移除,脚本和 systemd 单元里如果还有这个参数,需要删掉。
CNI 移除。只支持 Netavark。原有的 CNI 配置目录不再被读取。
iptables 移除。防火墙规则统一走 nftables,宿主机上只有 iptables 的环境要先切过去。
BoltDB 移除。启动 6.0.0 时会自动把本地容器数据库迁移到 SQLite。维护者的建议是:为无缝迁移,先升到 Podman 5.8 并重启,再升 6.0.0,不要在 5.x 旧版本上直接跳。
不再支持 Intel Mac、Windows 10。
网络隔离默认启用,Docker 兼容性和安全性提升。同时移除与「隔离关闭」相关的 Docker 兼容 API 特殊处理(#27349)。
新特性
Pesto:rootless 端口转发新增实验支持。rootless bridge 网络可以用 Pasta 的内核级端口转发(Pesto)替代 rootlessport,从而在 rootless 容器中保留原始客户端源 IP。默认仍是 rootlessport;后续 Pesto 又补上了 IPv6 端口转发与源 IP 保留。
多静态 IP:向 --net 多次传 ip= 即可给容器设多个静态地址:
podman run --net mynet:ip=10.0.0.2,ip=10.0.0.3,ip=10.0.0.4 ...
podman network create --route 现在可以创建 blackhole、unreachable、prohibit 路由:
podman network create --route 10.20.30.40/24,blackhole ...
(#20022)
卷:podman volume prune 与 Docker 对齐,只清未使用的匿名卷;要清掉所有未使用卷得显式加 --all(#24597)。新增 --dry-run(#27838)。新增 podman volume rename(#28189)。
Quadlet 重构:不再用 .app 文件跟踪 Quadlet 及其关联文件,改为放进子目录,减少 bug、也便于手工管理;支持 REST API;.volume 单元新增 UID=、GID=、Options=;新增搜索路径 /usr/share/containers/systemd/users 与 .../users/${UID}(#27843);.container 单元支持挂载匿名卷(Mount= 不带 source,#28497)与 ImageVolume=;podman quadlet list 新增别名 ls、--noheading,输出新增 Pod 字段,支持 --filter status=(#28369)。
Podman Machine:podman machine 命令可以在不切换活动 provider 的情况下管理不同 provider 的 VM;新增 podman machine os update(无需重建虚拟环境即可更新机器 OS)与 podman machine restart(#28366)。
配置:containers.conf 新增 default_host_ips(未指定 IP 时端口转发使用的默认宿主 IP,#27186);新增实验项 rootless_port_forwarder="pasta";WSL 下新增 force_port_listen(在新 WSL provider 的 Windows 机器 VM 上自动设置)。
命令与选项:podman create/run/pod create 的卷支持 nocreate,卷不存在时报错而非创建;--log-opt 支持 label=(仅 journald);--gpus 兼容 AMD GPU;不少命令新增 --tls-details,用 containers-tls-details.yaml(5) 定制 TLS。
事件与过滤:died 事件新增 OOMKilled 属性(#26701);新增 artifact 生命周期事件(create/pull/push/remove,#27260);podman ps 与 container prune 新增 --filter annotation=(#28562)。
其他:podman image scp 新增 --format(#28183);podman image trust 支持 --signature-policy(podman image trust set 中为必填);podman manifest push 新增 --retry 与 --retry-delay(#28590);podman network rm 新增 --ignore(#28363);podman generate kube 支持把 healthcheck 生成为 livenessProbe(#22095)。
行为变化
podman commit默认先暂停容器再创建镜像,避免并发修改;要热提交用--pause=false。--format='{{json .Labels}}'在 ps/pod ps/volume ls 上现在输出逗号分隔的key=value,不再是 JSON map,向 Docker 对齐(#21847)。- 多个过滤实例组合逻辑由 OR 改为 AND,已有的多过滤命令语义会变。
依赖升级
Skopeo v1.23、Netavark 与 Aardvark v2.0.0、container-libs common 1.68.0。
安全
修复 CVE-2026-57231:恶意容器镜像可用畸形环境项配合 * glob 操作符,把宿主环境变量泄漏进容器。升到 6.0.0 可堵住该泄漏。
升级建议
- 先升到 5.8 并重启,确保 BoltDB → SQLite 迁移完成,再升 6.0.0。
- 确认系统使用 cgroups v2。
- 网络改用 Netavark/Pasta,防火墙改用 nftables。
- 检查
containers.conf是否需要按新的 client/server 逻辑迁移或拆分。 - 在 Fedora 43→44 等实际场景验证 SQLite 数据库读取与容器运行正常。