podman 是无守护进程的容器管理。相比 Docker 而言,其突出优点是:

  • 无需守护服务

  • 容器运行在用户空间而非 root 下

  • 与 systemd 集成

另外,由于没有了守护服务,因此也变相加快了系统的启动时间

podman 的配置文件储存在 /etc/containers 下和 ${HOME}/.config/containers

podman 和 podman-compose 在很大程度上可以与 docker 和 docker-compose 兼容

创建容器

在第一次使用 podman-compose 部署服务时,podman 会下载 k8s/pause,然而 gcr 的服务上不会,会导致卡死。这就需要手动下载一个 这个容器 :

$ podman pull k8simage/pause:3.5
$ podman tag docker.io/k8simage/pause:3.5 k8s.gcr.io/pause:3.5

在使用 docker-compose 创建容器的时候,需要着重注意的是 environment 节中不要使用环境变量

开机启动容器

podman 通过与 systemd 集成完成了对容器自启功能的需求。步骤为 :

$ mkdir -p $HOME/.config/systemd/user
$ podman generate systemd -f -n whistle --new
$ systemctl --user enable --now container-whistle.service

自动更新容器

要使 podman 可以自动更新容器,需要:

  • 在生成服务时添加 --new 标志

  • 在 docker-compose.yml 中添加以下内容:

    labels:
      io.containers.autoupdate: registry
  • 启动用户服务 podman-auto-update.timer

此外,还可以通过 podman auto-update 来验证容器是否加入到了自动更新中

挂载的数据卷无法访问

这个问题不知道为什么 audit 不会报错。但是确实是 SELinux 引起的。解决方法是修改文件上下文 :

$ chcon -Rt svirt_sandbox_file_t /data/
Last moify: 2024-12-26 10:35:34
Build time:2025-07-18 09:41:42
Powered By asphinx