Podman 的 Pod 原生支持单机容器组共享网络命名空间(默认)和显式挂载的存储卷;创建 Pod 后,容器须通过 --pod 加入并共用 localhost 通信,共享目录需统一挂载路径或命名卷。

Podman 中的 Pod 本身已原生支持单机内容器组共享网络命名空间和部分存储资源,无需额外插件或 Kubernetes。关键在于正确使用 podman pod create 创建 Pod,并在其中运行容器时绑定到该 Pod。
共享网络命名空间(默认行为)
Podman 的 Pod 默认启用 network=slirp4netns(rootless)或 network=cni(rootful),所有加入同一 Pod 的容器自动共享同一个网络命名空间——即共用一个 localhost、相同端口视图、可直接通过 localhost:端口 通信。
- 创建 Pod 时无需指定网络参数,Podman 默认启用共享网络
- 容器必须通过
--pod <pod-name-or-id>加入该 Pod,不能用--network覆盖 - 验证方式:进入任一容器执行
ip addr,会发现所有容器的 lo、eth0 配置完全一致
共享存储卷(需显式挂载)
Pod 本身不自动共享文件系统,但可通过 Pod 级别定义匿名卷或绑定挂载,再由各容器统一挂载同一路径,实现数据共享。
- 创建 Pod 时用
--volume /shared-data:/shared-data:Z(rootless)或:z(rootful)声明共享目录 - 后续加入的容器只需挂载相同路径(如
-v /shared-data:/shared-data),即可读写同一位置 - 推荐使用命名卷(
podman volume create mydata),再通过--volume mydata:/shared-data:Z绑定,便于管理与复用
启动与管理典型流程
以运行 Nginx + Flask API 共享配置和日志为例:
- 创建 Pod:
podman pod create --name webapp-pod -p 8080:80 - 创建共享卷:
podman volume create webapp-data - 运行 Flask 容器:
podman run -d --pod webapp-pod --volume webapp-data:/app/data:Z flask-app - 运行 Nginx 容器:
podman run -d --pod webapp-pod --volume webapp-data:/usr/share/nginx/html:Z nginx - 此时两容器可通过
localhost:5000(Flask)和localhost(Nginx)在 Pod 内互通,且共用/app/data和静态文件目录
注意事项与限制
Podman 的 Pod 是单机轻量抽象,不跨主机,也不提供服务发现或负载均衡。
- rootless 模式下,端口映射仅支持非特权端口(>1024),需用
-p 8080:80而非-p 80:80 - 容器退出后 Pod 不自动销毁;需手动
podman pod stop或rm - 不支持 Pod 级别的健康检查或重启策略,这些需在各容器中单独配置
- 共享内存(/dev/shm)、进程命名空间等需额外加
--shm-size或--pid=host,默认不共享

















