侧边栏壁纸
博主头像
Setyg的博客

当秋风染红落叶的时候,就是新生~

  • 累计撰写 86 篇文章
  • 累计创建 66 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Ubuntu 在线安装 Podman 实践(附国内镜像源配置)

Setyg
2026-09-22 / 0 评论 / 0 点赞 / 4 阅读 / 0 字

这篇笔记原本记的是「加 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 LTSjammy3.4.4
Ubuntu 24.04 LTSnoble4.9.3
Ubuntu 26.04 LTSresolute5.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),有两个问题:

  1. 格式过时。Podman 3.0 起(底层 containers-image v5)用的是 V2 格式,搜索源写在顶层 unqualified-search-registries,不再是 [registries.search] 表。
  2. 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
0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区