在 Debian 中,离线部署 podman 和 podman-compose
在 Debian(如 Debian 12/13) 中进行 离线部署 Podman + podman-compose,一般采用 “在有网络的机器下载依赖 → 拷贝到目标机器安装” 的方式。下面给你一套 生产环境常用、稳定的离线部署方法(适合你现在这种 服务器不能联网的场景)。
一、Podman 组件结构(先理解)
Podman 并不是一个单独软件,完整运行通常需要:
| 组件 | 作用 |
|---|---|
| podman | 容器引擎 |
| buildah | 构建镜像 |
| conmon | 容器运行管理 |
| crun / runc | OCI runtime |
| containernetworking-plugins | 容器网络 |
| fuse-overlayfs | rootless overlay |
| slirp4netns | rootless 网络 |
| 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 download2)如果没有 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