这篇笔记原本记的是「加 openSUSE 的 Kubic 仓库装 Podman」——这套方法在几年前是对的,但现在整个仓库已经没有 podman 包了,照抄必然失败。我实测了那个仓库的现状,并把方法改成现在能用的:直接用 Ubuntu 官方源。
一、先说结论:老方法为什么不能用了
老教程加的是 openSUSE OBS 的 devel:kubic:libcontainers:stable 仓库。它当年存在的唯一理由是:Ubuntu 20.10 之前官方源里没有 Podman,只能在第三方仓库拿。现在每个受支持的 Ubuntu 官方源都有 Podman,而这个第三方仓库已经被停掉了。
我直接查了仓库的文件索引(2026-09-22),证据如下:
| 检查项 | 结果 |
|---|---|
xUbuntu_24.04/ 目录 |
HTTP 404,目录根本不存在 |
xUbuntu_24.04/Release.key |
HTTP 404(笔记里就是用这个 URL 导密钥的) |
xUbuntu_22.04/ 目录 |
目录还在,Packages 索引里有 55 个包 |
xUbuntu_22.04 里的 podman 包 |
0 个。只剩 catatonit、conmon、containers-common、cri-o-runc 等 CRI-O 相关包 |
也就是说:就算你的系统是 22.04 这种还「有目录」的版本,apt install podman 也照样装不上,因为仓库里已经不放 podman 了。
顺带一提,笔记里用的 apt-key add 本身也走到头了:
| 系统 / 版本 | apt-key 状态 |
|---|---|
| Debian 12 / Ubuntu 24.04 | 尚可运行,但会打废弃警告(最后支持的两个版本) |
| apt 2.9.17(2024-12)起 | 已从 apt 中移除 |
| Ubuntu 25.04+ / Debian 13+ | 直接 apt-key: command not found |
以后要加第三方源,正确的导密钥方式是把密钥落到 /etc/apt/keyrings/,再用 signed-by= 把它绑定到那一个源上(APT 2.4 起提供该目录)。/etc/apt/trusted.gpg.d/ 也能用,但那里的密钥对所有源都生效,安全性更差。
二、正确的在线安装:直接用 Ubuntu 官方源
Podman 在 Ubuntu 的 universe 组件里。各版本能装到的版本号:
| Ubuntu | 代号 | 官方源 Podman 版本 |
|---|---|---|
| Ubuntu 22.04 LTS | jammy | 3.4.4 |
| Ubuntu 24.04 LTS | noble | 4.9.3 |
| Ubuntu 26.04 LTS | resolute | 5.7.0 |
安装步骤:
# 1) 确认系统版本,决定后面能装到哪个 podman
. /etc/os-release && echo "$PRETTY_NAME"
# 2) 确保 universe 组件已启用(podman 在 universe 里)
# 已启用时会提示已存在,无副作用
sudo add-apt-repository universe
# 3) 安装
sudo apt update
sudo apt install -y podman
# 4) 验证
podman version
podman run --rm docker.io/library/hello-world安装会自动带上运行时的整套依赖:conmon(容器进程监视)、crun 或 runc(OCI 运行时)、netavark + aardvark-dns(网络与 DNS)、fuse-overlayfs、uidmap。这些不用手动装,装完 podman info 能直接跑起来。
关于第 3 步的两个提醒:
- 原笔记里写的是
sudo apt-get -y upgrade,这会把整个系统的包全量升到最新。加完第三方源立刻全量 upgrade 风险不小——新源里的包可能和现有环境冲突。装 Podman 只需要apt install podman,不必顺带升级全系统。 - 如果确实想看看会动哪些包,先跑
apt list --upgradable看一眼再决定。
三、如果非要 Podman 5.x
Ubuntu 24.04 官方源停在 4.9.3。想要 5.x,官方并没有提供 apt 仓库,只能走下面两条路,都不算舒服:
| 方法 | 做法 | 代价 |
|---|---|---|
| 上游静态二进制 | 从 GitHub Release 下载 podman + crun/runc + conmon + netavark 的静态包,解到 /usr/local/bin |
要自己校验校验和、手动跟着升级;24.04 上 rootless 可能因为 /usr/local/bin 没有对应 AppArmor profile 而报 reexec 权限错误;和 apt 装的 4.9.3 混用会碰到 boltdb / sqlite 两种数据库后端指向同一个 graph root 的问题 |
| APT pinning 到 plucky | 把 Ubuntu 25.04(plucky)加进 apt 源,再用 /etc/apt/preferences.d/ 把 podman 及其一批依赖钉到 plucky |
算「半个跨版本升级」,依赖项要一个个钉,后续系统升级会持续冲突。不建议在生产机上做 |
结论:除非有明确的功能需求(比如 Podman 5 的 quadlet 新写法、pasta 网络默认开启),否则就用官方源的版本。想用新版本,最省心的办法是直接上 Ubuntu 26.04,官方源就是 5.7.0。
四、配置国内镜像源(笔记里的写法是错的)
原笔记用的这种写法:
echo "[registries.search]" | sudo tee -a /etc/containers/registries.conf
echo "registries = ['docker.io', 'registry.aliyuncs.com']" | sudo tee -a /etc/containers/registries.conf这是 Podman 3 以前的老格式(V1),有两个问题:
- 格式过时。Podman 3.0 起(底层 containers-image v5)用的是 V2 格式,搜索源写在顶层
unqualified-search-registries,不再是[registries.search]表。 - V1 根本不支持镜像加速。它只能加「搜索源」,不支持
[[registry.mirror]]、最长前缀匹配、location 重写——而配国内加速恰恰需要 mirror。
两种格式的差别:
| 能力 | V1(老写法) | V2(现行) |
|---|---|---|
| 声明搜索源 | [registries.search] 表 + registries = [...] | 顶层 unqualified-search-registries = [...] |
| 镜像加速(mirror) | 不支持 | [[registry]] + [[registry.mirror]] |
| 最长前缀匹配 | 不支持 | 支持 |
| location 重写 | 不支持 | 支持 |
还有一处更细的错:registry.aliyuncs.com 不是 Docker Hub 的公共代理,它托管的是阿里云自己的命名空间。把它塞进搜索源,结果就是 podman pull nginx 找到一个空仓库然后失败。阿里云的加速器是控制台里发给你的专属地址,形如 <你的ID>.mirror.aliyuncs.com。
正确写法:用 drop-in,不动原文件
不要 mv 掉 /etc/containers/registries.conf。改配置文件更稳的做法是往 drop-in 目录放一个文件——它在主文件之后加载,字段直接覆盖主文件,而且包升级时不会冲突:
# drop-in 目录里的文件按字母序加载,只认 .conf 后缀,且必须是 V2 格式
sudo mkdir -p /etc/containers/registries.conf.d
sudo tee /etc/containers/registries.conf.d/000-mirror.conf >/dev/null <<'EOF'
unqualified-search-registries = ["docker.io"]
[[registry]]
prefix = "docker.io"
location = "docker.io"
[[registry.mirror]]
location = "docker.m.daocloud.io"
EOF配置的语义,几个容易搞混的点:
unqualified-search-registries只影响不带仓库名的短名(比如podman pull nginx)。写全名podman pull docker.io/library/nginx时它不参与。[[registry.mirror]]是按顺序尝试的:先试所有 mirror,都不行才回落到location。所以配了 mirror 不会让拉不到镜像时彻底失败。- 如果想让流量只走镜像、不回落到官方源,就别写 mirror,直接把
location指向镜像地址。 prefix决定这段配置匹配哪些镜像,支持*.example.com这种通配,最长匹配优先。
验证是否生效:
podman info | grep -A 20 'registries:'
podman pull docker.io/library/nginx:alpine关于公共加速器的一个现实提醒:国内的公开 Docker Hub 加速站这几年反复关停,今天能用的地址下个月可能就没了。个人使用最稳的是阿里云控制台里自己的专属加速地址(每个账号一个,长期稳定);团队或生产环境建议自建 registry mirror,别把可用性绑在公共站上。
五、rootless 需要的前提
Podman 主打 rootless(不需要守护进程,普通用户直接跑容器),但 rootless 依赖两样东西,装完最好确认一下:
# 1) uidmap 提供 newuidmap / newgidmap,rootless 的用户命名空间映射靠它
sudo apt install -y uidmap
# 2) 当前用户要有 subuid / subgid 映射段
grep "$USER" /etc/subuid /etc/subgid
# 正常应看到类似:youruser:100000:65536
# 没有的话补上:
sudo usermod --add-subuids 100000-165535 --add-subgids 100000-165535 "$USER"
# 3) rootless 的网络栈:24.04 起推荐 passt
sudo apt install -y passt # 老版本用 slirp4netns
podman info | grep -i -A 3 rootless六、装完值得知道的两件事
| 需求 | 做法 |
|---|---|
| docker 命令直接换成 podman | 装 podman-docker 包,它会提供 docker 命令的垫片,已有的脚本和 docker-compose 基本能直接跑 |
| 给需要 Docker API 的工具(如 IDE、CI)用 | systemctl --user enable --now podman.socket,然后指向 unix://$XDG_RUNTIME_DIR/podman/podman.sock |
七、常见问题
| 现象 | 原因与处理 |
|---|---|
apt-key: command not found |
系统是 Ubuntu 25.04+,apt-key 已被移除。而且就算能跑,它要加的 OBS 仓库也已经没有 podman 包了——这条路整个作废,改用官方源 |
apt update 报 Release.key 404、NO_PUBKEY 或 EXPKEYSIG ... devel:kubic |
同一个原因:Kubic 仓库已停更/过期。把 /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list 删掉,再 apt update |
E: Unable to locate package podman |
universe 组件没启用。跑 sudo add-apt-repository universe && sudo apt update |
改了配置但 podman info 里 registries 没变 |
drop-in 文件后缀不是 .conf(只有 .conf 会被加载),或者文件放错了目录。V1 格式的内容放在 drop-in 里也不生效——drop-in 只接受 V2 |
rootless 报 cannot clone: Operation not permitted 或 newuidmap: command not found |
缺 uidmap,或者 /etc/subuid 里没有当前用户的映射段。按上面第五节补 |
24.04 上 rootless 报 failed to reexec: Permission denied |
大概率是走了 /usr/local/bin 的静态二进制路线,缺少对应的 AppArmor profile。改用发行版源装的版本即可 |
podman pull 卡住或超时 |
没配镜像,或配的公共镜像站已经挂了。先 podman info 确认注册表配置生效,再用 podman pull 带完整仓库名单独试 |
八、速查卡
# ===== 安装(Ubuntu 22.04 / 24.04 / 26.04 通用)=====
sudo add-apt-repository universe
sudo apt update
sudo apt install -y podman
podman version
# 官方源版本:22.04 -> 3.4.4 | 24.04 -> 4.9.3 | 26.04 -> 5.7.0
# ===== 国内镜像加速(drop-in,V2 格式)=====
sudo mkdir -p /etc/containers/registries.conf.d
sudo tee /etc/containers/registries.conf.d/000-mirror.conf >/dev/null <<'EOF'
unqualified-search-registries = ["docker.io"]
[[registry]]
prefix = "docker.io"
location = "docker.io"
[[registry.mirror]]
location = "docker.m.daocloud.io"
EOF
podman info | grep -A 20 'registries:'
# ===== rootless 前提 =====
sudo apt install -y uidmap passt
grep "$USER" /etc/subuid /etc/subgid
# ===== 收尾 =====
podman run --rm docker.io/library/hello-world
sudo apt install -y podman-docker # 提供 docker 命令垫片
systemctl --user enable --now podman.socket # 提供 Docker API
# ===== 已经作废、别再用 =====
# devel:kubic:libcontainers:stable 仓库 -> 已无 podman 包(24.04 目录直接 404)
# apt-key add -> 25.04+ 已移除
# [registries.search] + registries=[] -> V1 老格式,不支持 mirror
评论区