在 Debian 中,离线部署 podman 和 podman-compose

Debian(如 Debian 12/13) 中进行 离线部署 Podman + podman-compose,一般采用 “在有网络的机器下载依赖 → 拷贝到目标机器安装” 的方式。下面给你一套 生产环境常用、稳定的离线部署方法(适合你现在这种 服务器不能联网的场景)。

一、Podman 组件结构(先理解)

Podman 并不是一个单独软件,完整运行通常需要:

组件作用
podman容器引擎
buildah构建镜像
conmon容器运行管理
crun / runcOCI runtime
containernetworking-plugins容器网络
fuse-overlayfsrootless overlay
slirp4netnsrootless 网络
uidmap用户映射

如果缺少这些组件,rootless podman 会运行异常

二、在有网络机器下载所有 deb 包

在一台 相同版本 Debian(例如 Debian 13)机器执行:

mkdir podman-offline
cd podman-offline

下载 Podman 及所有依赖:

apt download \
podman \
podman-compose \
buildah \
conmon \
crun \
containernetworking-plugins \
fuse-overlayfs \
slirp4netns \
uidmap \
aardvark-dns \
netavark

再下载所有依赖包:

apt-rdepends podman | grep -v "^ " | xargs apt download

1)如果报类似错误:

~/podman-offline$ apt-rdepends podman | grep -v "^ " | xargs apt download
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Error: Can't select candidate version from package container-network-stack as it has no candidate
Error: Can't select candidate version from package debconf-2.0 as it has no candidate
Error: Can't select candidate version from package pinentry as it has no candidate

第一步:生成依赖列表

apt-rdepends podman podman-compose 2>/dev/null \
| grep -v "^ " \
| sort -u > all-packages.txt

第二步:只保留可下载的包

while read -r pkg; do
    apt-cache policy "$pkg" | grep -q "Candidate: " || continue
    candidate=$(apt-cache policy "$pkg" | awk '/Candidate:/ {print $2}')
    [ "$candidate" = "(none)" ] && continue
    echo "$pkg"
done < all-packages.txt > real-packages.txt

第三步:下载

cat real-packages.txt | xargs -r apt download

2)如果没有 apt-rdepends

sudo apt install apt-rdepends

下载 podman-compose 的依赖:

apt-rdepends podman-compose | grep -v "^ " | xargs apt download

下载完成后目录会有大量 .deb

例如:

podman_4.9.3_amd64.deb
buildah_1.37.3_amd64.deb
conmon_2.1.12_amd64.deb
crun_1.15_amd64.deb
netavark_1.10_amd64.deb
aardvark-dns_1.10_amd64.deb
podman-compose_1.0.6_all.deb
...

打包:

tar czvf podman-offline.tar.gz *.deb

拷贝到离线服务器。

三、离线服务器安装

上传到服务器后:

tar xzvf podman-offline.tar.gz

安装:

sudo dpkg -i *.deb

如果有依赖顺序问题:

sudo apt install -f

(此命令不会联网,只是整理依赖)

四、验证安装

查看 podman

podman --version

例如:

podman version 4.9.3

查看 compose

podman-compose --version

五、初始化 rootless Podman(推荐)

你的系统如果是普通用户运行容器:

podman system migrate

检查:

podman info

如果看到:

rootless: true

说明成功。

六、测试运行容器

podman run hello-world

或者:

podman run -it alpine sh

七、podman-compose 使用

创建 compose.yml

services:
  nginx:
    image: nginx
    ports:
      - "8080:80"

运行:

podman-compose up -d

八、比 apt 离线更简单的方法(强烈推荐)

如果你有 另一台 Debian 服务器,最简单方式是:

在联网服务器:

apt install podman podman-compose

然后打包:

dpkg -l | grep podman

复制 /var/cache/apt/archives/*.deb 到离线服务器。

九、常见坑

1 podman-compose 实际调用 docker-compose

如果看到:

Executing external compose provider "/usr/local/bin/docker-compose"

说明系统没有 podman-compose。

解决:

apt install podman-compose

2 rootless 网络失败

安装:

slirp4netns
fuse-overlayfs
uidmap

3 podman socket 错误

Cannot connect to podman.sock

解决:

systemctl --user enable podman.socket
systemctl --user start podman.socket