综合 Podman 6.0.0 升级笔记:cgroups v1、CNI、iptables、slirp4netns 全部移除

2026-09-17 21:04:43

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 Machinepodman 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 pscontainer prune 新增 --filter annotation=(#28562)。

其他podman image scp 新增 --format(#28183);podman image trust 支持 --signature-policypodman 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 可堵住该泄漏。

升级建议

  1. 先升到 5.8 并重启,确保 BoltDB → SQLite 迁移完成,再升 6.0.0。
  2. 确认系统使用 cgroups v2。
  3. 网络改用 Netavark/Pasta,防火墙改用 nftables。
  4. 检查 containers.conf 是否需要按新的 client/server 逻辑迁移或拆分。
  5. 在 Fedora 43→44 等实际场景验证 SQLite 数据库读取与容器运行正常。
复制全文 生成海报 Podman 容器 运维 Linux

推荐文章

程序员茄子在线接单