Podman Compose 入门教程
Podman Compose 用 compose.yaml 管多容器应用,兼容 Docker Compose 文件;底层 Podman 无守护进程、rootless 容器更安全。本文从安装、卷/网络/日志管理到从 Docker Compose 迁移全覆盖。
直接回答:Podman Compose 是 Podman 生态的多容器编排工具——吃同样的 compose.yaml 文件,但底层 Podman 无中心守护进程(daemonless)、默认 rootless(容器以普通用户权限运行),支持普通用户 rootless 运行,但 Docker 也支持 rootless;资源与安全差异须按具体配置评估。迁移需逐项验证 provider 兼容性。
与 Docker Compose 的差异
- 无守护进程:容器由 OCI runtime 与 conmon 等组件管理,没有 root 权限的后台 daemon 这个单点
- rootless 默认:可降低部分权限风险,不能隔离宿主内核漏洞或用户可访问文件
- 文件兼容:compose.yaml 语法通用,迁移成本低
安装与上手
pipx install podman-compose # 或系统包管理器
podman compose up -d # 语法同 docker compose
podman compose ps
podman compose logs -f web
podman compose down
卷、网络与日志
services:
web:
image: nginx
volumes: ["webdata:/usr/share/nginx/html"]
ports: ["8080:80"]
volumes: { webdata: {} }
卷与网络语义与 Docker 一致;日志 podman logs 用法相同。
rootless 与 .env
rootless 下注意:低端口限制取决于宿主 ip_unprivileged_port_start;优先用高端口或受控反向代理,不随意放宽全机限制;挂载卷的属主按用户命名空间映射。.env 文件注入配置与 Docker Compose 相同。
迁移清单
Docker Compose → Podman Compose 应逐项验证:外部 Compose provider、网络 DNS、健康依赖、密钥、卷标签及命令参数、检查特权容器依赖(rootless 下特权操作受限)、验证卷属主。
迁移后先检查应用日志实际写到哪里,以及 rootless 用户能否读取绑定挂载目录。若已用观测云集中日志,可按 DataKit 文件采集配置接入这些文件,用一次容器重建检查路径、属主和续读;Podman 的日志驱动与权限须单独验证。
常见问题(FAQ)
Q:Podman Compose 兼容性完整吗?
A:常见配置可兼容,具体字段以 provider 实现为准;小众指令(部分 deploy 字段)以 Swarm 语义为主不支持——迁移后先全量验证一遍。
Q:podman compose 和 podman-compose 是一个东西吗?
A:殊途同归:podman-compose 是 Python 实现的老项目;Podman 4+ 内置 podman compose 子命令(默认调外部 provider)。podman compose 是外部 provider 包装器,可能调用 docker-compose 或 podman-compose;功能由选中 provider 决定,并不保证等价。
Q:生产能用吗?
A:单机场景可以;生产常驻建议配 systemd 单元(podman generate systemd 已演进为 quadlet)管理容器生命周期。
官方参考
本文依据官方文档整理,示例未在本文中进行运行验证。生产部署需按所用版本、权限和实际负载验证。