修复Podman Ubuntu 24.04下无法查找容器名

开发机从 Ubuntu Server 20.04.6 升级到 Ubuntu Server 24.04.1 LTS 版本, 没遇到什么大问题. 但是发现 podman 变成了 [installed,local] 版本, 没有被自动升级. 但是看了一下容器,镜像,Volume还在.

  1. 卸载当前版本

我之前用的是kubic社区的podman源, 需要先卸载 sudo apt remove podman 再删除掉apt能识别出来不再需要的依赖: sudo apt autoremove

此时如果直接安装新版本 podman 可能会有问题, 提示 /etc/containers/containers.conf 被包 containers-common 使用.

可以尝试: sudo apt remove containers-common buildah crun. 卸载前通过 sudo apt list --installed | grep installed,local 确认是否为本地版本.

还是不行的话就只能手动逐个卸载了:

1
2
3
sudo dpkg --remove crun
sudo dpkg --remove podman
sudo dpkg --remove containers-common

总之需要保证之前的版本都卸载掉. 不需要(也不要)运行 purge. 会丢失数据.

  1. 安装新版本

sudo apt install podman golang-github-containernetworking-plugin-dnsname

其中 golang-github-containernetworking-plugin-dnsname 这个不清楚为什么在 Ubuntu 24.04 源里名字这么奇怪, 根据文档来看应该是 podman-plugins 或者 podman-dnsname 才对. Podman 4.x 版本删除了 dnsname 这个插件, 导致通过 compose 拉起的容器组之间不能直接通过 service 名字做寻址.

这个名字是通过 sudo apt search dnsname 找到的.

如果不安装这个包, 可能会看到类似下面的错误:

1
WARN[0000] Error validating CNI config file /home/kiritow/.config/cni/net.d/wgop-net-wg0.conflist: [failed to find plugin "dnsname" in path [/usr/local/libexec/cni /usr/libexec/cni /usr/local/lib/cni /usr/lib/cni /opt/cni/bin]]

装完之后在 /usr/lib/cni 下应该会看到 dnsname 插件.

  1. 安装Docker-Compose

由于Docker Compose V2已经从pip包升级合并到docker命令了, 因此我们需要使用docker官网提供的docker-compose独立安装包: Install Compose standalone

注意: 之前提到的 Ubuntu 22.04 里面 containernetworking-plugins 的问题似乎已经解决了, 现在安装 podman 会正确的安装这个依赖包. 参考之前的文章

参考

containers/dnsname: name resolution for containers 这个插件现在已经archive了.

下面的参考没太大价值, 更多感觉还是要看 dnsname 这个插件的文档: Using the dnsname plugin with Podman

Podman network dns option not working with the DNS plugin enabled #20911

Impossible to override container’s DNS with network #17499

Small issues (and fixes) when moving to Ubuntu 23.04

Podman dnsname install issues