在 Podman 中,可以通过 podman pod create 命令在 Podman 中创建一个新的空 Pod。Pod 是共享网络、存储等资源的容器集合,创建后会生成一个唯一的 Pod ID,Pod 初始状态为 created(已创建但未启动),需要通过 podman pod start 命令启动。
podman pod create 命令语法如下:
podman pod create [OPTIONS] [NAME]
参数说明:
OPTIONS:配置 Pod 的参数(如端口映射、资源限制、网络设置等)
NAME:可选,为 Pod 指定自定义名称(便于识别,若不指定则自动生成)
关键参数:
-n, --name 为 Pod 分配名称,例如:--name my-web-pod
-l, --label 设置 Pod 元数据标签(键值对),例如:--label app=web,env=prod
--pod-id-file 将 Pod ID 写入指定文件,例如:--pod-id-file /tmp/pod.id
-p, --publish 端口映射(主机端口:Pod 端口),例如:--publish 8080:80,6379:6379
--network 指定 Pod 连接的网络,例如:--network bridge
--ip 为 Pod 分配静态 IPv4 地址,例如:--ip 192.168.1.100
-h, --hostname 设置 Pod 的主机名,例如:--hostname web-pod
--add-host 添加主机 - IP 映射(写入 /etc/hosts),例如:--add-host db:192.168.1.200
-m, --memory 设置内存限制,例如:--memory 1g(限制 1GB 内存)
--cpus 设置 CPU 核心数限制,例如:--cpus 2(限制使用 2 核 CPU)
--cpu-shares 设置 CPU 相对权重(共享资源时优先级),例如:--cpu-shares 512
--blkio-weight 设置块 IO 权重,例如:--blkio-weight 500
-v, --volume 挂载卷到 Pod(所有容器共享),例如:--volume /host/data:/pod/data:rw
--shm-size 设置 /dev/shm 临时存储大小,例如:--shm-size 256m
--share 指定 Pod 共享的内核命名空间(默认 ipc,net,uts),例如:--share ipc,net,pid,uts
--pid 设置 PID 命名空间模式,例如:--pid host(共享主机 PID 命名空间)
--infra 是否创建 infra 容器(默认 true,用于共享命名空间),例如:--infra=false(不创建 infra 容器)
--restart 设置 Pod 重启策略,例如:--restart always(总是重启,取值 always、no、never、on-failure、unless-stopped)
--replace 若同名 Pod 存在则替换,例如:--replace
--exit-policy 最后一个容器退出时 Pod 的行为,例如:--exit-policy stop(Pod 随最后一个容器停止)
continue 默认值,即使 Pod 中所有业务容器都已退出,Pod 仍会继续存在(infra 容器保持运行),Pod 状态维持为 Running。
stop 当最后一个业务容器退出时,Pod 会被停止(infra 容器也会停止),Pod 状态变为 Exited。
remove 当最后一个业务容器退出时,Pod 会被自动删除(包括所有关联资源)。
点击查看 podman pod create 命令手册。
podman pod ls(别名 podman pod ps/podman pod list)用于列出系统中所有 Pod 的信息,包括 Pod 的 ID、名称、状态、创建时间、包含的容器数量等。默认情况下,该命令会显示所有状态的 Pod(包括 created、running、exited 等)。
简单示例:
C:\Users\Administrator> podman pod ls POD ID NAME STATUS CREATED INFRA ID # OF CONTAINERS 0c9858859aa8 web-redis-pod Running About an hour ago a00c13fb2b32 3
输出字段说明:
POD ID:Pod 的唯一标识符(默认截断显示)
NAME:Pod 的名称(若未指定则自动生成)
STATUS:Pod 的状态(running/created/exited 等)
CREATED:Pod 的创建时间
INFRA ID:Infra 容器的 ID
# OF CONTAINERS:Pod 内包含的容器数量(包括 Infra 容器)
常用选项如下:
-q, --quiet 仅输出 Pod 的 ID(适合脚本批量处理),例如:podman pod ls -q
-f, --filter 按条件筛选 Pod(如状态、名称等),例如:podman pod ls -f status=running
--noheading 不显示表头(纯数据输出),例如:podman pod ls --noheading
--no-trunc 不截断 Pod / 容器 ID,显示完整字符串,例如:podman pod ls --no-trunc
--ctr-ids 显示 Pod 内所有容器的 ID,例如:podman pod ls --ctr-ids
--ctr-names 显示 Pod 内所有容器的名称,例如:podman pod ls --ctr-names
--ctr-status 显示 Pod 内所有容器的状态,例如:podman pod ls --ctr-status
--ns 显示 Pod 的命名空间信息(如网络、PID 命名空间),例如:podman pod ls --ns
--format 自定义输出格式(支持 JSON 或 Go 模板),例如:podman pod ls --format json,podman pod ls --format "{{.ID}}\t{{.Name}}"
--sort 按指定字段排序(默认按创建时间),例如:podman pod ls --sort name(按名称排序),podman pod ls --sort status(按状态排序)
点击查看 podman pod ls 命令手册。
简单示例:
# 列出系统中所有Pod的基本信息(默认格式,包含ID、名称、状态等核心字段)
C:\Users\Administrator> podman pod ls
POD ID NAME STATUS CREATED INFRA ID # OF CONTAINERS
0c9858859aa8 web-redis-pod Running About an hour ago a00c13fb2b32 3
# 筛选出状态为“运行中”的Pod(仅显示Running状态的Pod)
C:\Users\Administrator> podman pod ls -f status=running
POD ID NAME STATUS CREATED INFRA ID # OF CONTAINERS
0c9858859aa8 web-redis-pod Running About an hour ago a00c13fb2b32 3
# 列出Pod信息但不显示表头(纯数据输出,适合脚本处理)
C:\Users\Administrator> podman pod ls --noheading
0c9858859aa8 web-redis-pod Running About an hour ago a00c13fb2b32 3
# 显示完整的Pod ID和Infra ID(不截断长ID,便于精确识别)
C:\Users\Administrator> podman pod ls --no-trunc
POD ID NAME STATUS CREATED INFRA ID # OF CONTAINERS
0c9858859aa8e97fefa2b4839cc1c0f4c589ed40aca1840cbfd66b8f49eae31e web-redis-pod Running About an hour ago a00c13fb2b32bc1c07e7f3e277e09b6dcd8ba5a1dda62fc8f6a7e9a3c241cb37 3
# 显示Pod内所有容器的ID(便于查看Pod关联的容器标识)
C:\Users\Administrator> podman pod ls --ctr-ids
POD ID NAME STATUS CREATED INFRA ID IDS
0c9858859aa8 web-redis-pod Running About an hour ago a00c13fb2b32 a00c13fb2b32,059b42d1d4c2,0f9dce4e088a
# 显示Pod内所有容器的名称(直观识别容器角色,如infra、redis、nginx)
C:\Users\Administrator> podman pod ls --ctr-names
POD ID NAME STATUS CREATED INFRA ID NAMES
0c9858859aa8 web-redis-pod Running About an hour ago a00c13fb2b32 0c9858859aa8-infra,redis,nginx
# 显示Pod内所有容器的状态(检查容器是否均正常运行)
C:\Users\Administrator> podman pod ls --ctr-status
POD ID NAME STATUS CREATED INFRA ID STATUS
0c9858859aa8 web-redis-pod Running About an hour ago a00c13fb2b32 running,running,running
# 显示Pod的命名空间和cgroup信息(用于排查资源隔离、命名空间共享问题)
C:\Users\Administrator> podman pod ls --ns
POD ID NAME STATUS CREATED INFRA ID CGROUP NAMESPACES # OF CONTAINERS
0c9858859aa8 web-redis-pod Running About an hour ago a00c13fb2b32 /libpod_parent 3
# 以JSON格式输出Pod的完整信息(便于程序解析,包含容器详情、创建时间等)
C:\Users\Administrator> podman pod ls --format json
[
{
"Cgroup": "/libpod_parent",
"Containers": [
{
"Id": "a00c13fb2b32bc1c07e7f3e277e09b6dcd8ba5a1dda62fc8f6a7e9a3c241cb37",
"Names": "0c9858859aa8-infra",
"Status": "running",
"RestartCount": 0
},
{
"Id": "059b42d1d4c26c71753cc396a828a55c4c7e3820ec8971d0dbc97ea2d67dacc4",
"Names": "redis",
"Status": "running",
"RestartCount": 0
},
{
"Id": "0f9dce4e088a7060b3afcda1893ada8d894e987535126ad3937b5438c3c04535",
"Names": "nginx",
"Status": "running",
"RestartCount": 0
}
],
"Created": "2025-11-25T16:26:00.105431602+08:00",
"Id": "0c9858859aa8e97fefa2b4839cc1c0f4c589ed40aca1840cbfd66b8f49eae31e",
"InfraId": "a00c13fb2b32bc1c07e7f3e277e09b6dcd8ba5a1dda62fc8f6a7e9a3c241cb37",
"Name": "web-redis-pod",
"Namespace": "",
"Networks": [],
"Status": "Running",
"Labels": {
}
}
]
# 自定义输出格式,仅显示Pod ID和名称(按需提取关键信息)
C:\Users\Administrator> podman pod ls --format "{{.ID}}\t{{.Name}}"
0c9858859aa8 web-redis-pod
# 按Pod名称排序输出(便于按名称整理Pod列表)
C:\Users\Administrator> podman pod ls --sort name
POD ID NAME STATUS CREATED INFRA ID # OF CONTAINERS
0c9858859aa8 web-redis-pod Running 2 hours ago a00c13fb2b32 3
# 按Pod状态排序输出(便于按运行状态归类Pod)
C:\Users\Administrator> podman pod ls --sort status
POD ID NAME STATUS CREATED INFRA ID # OF CONTAINERS
0c9858859aa8 web-redis-pod Running 2 hours ago a00c13fb2b32 3
在 Podman 中创建一个名为 my-app-pod 的 Pod,并为其配置端口映射规则,分别映射为 8080:80、3306:3306。如下:
podman pod create \ --name my-app-pod \ --publish 8080:80 \ --publish 3306:3306
命令解释:
podman pod create 这是创建 Pod 的基础命令。
--name my-app-pod 为创建的 Pod 指定一个名称 my-app-pod,方便后续管理(如启动、停止、删除)。
--publish 8080:80 将宿主机的 8080 端口映射到 Pod 内部的 80 端口。外部用户访问宿主机的 8080 端口时,请求会被转发到 Pod 内运行的容器的 80 端口。
--publish 3306:3306 将宿主机的 3306 端口映射到 Pod 内部的 3306 端口(通常用于 MySQL 数据库服务)。
示例:
# 创建名为 my-app-pod 的 Pod C:\Users\Administrator> podman pod create --name my-app-pod --publish 8080:80 --publish 3306:3306 374e9c88dafe376ce5e47099dad835fab51f371bdc5139886b85c3b4766de9bb # 查看 Pod 列表 C:\Users\Administrator> podman pod ls POD ID NAME STATUS CREATED INFRA ID # OF CONTAINERS 374e9c88dafe my-app-pod Created 4 seconds ago 914eb0c35d15 1 0c9858859aa8 web-redis-pod Exited 17 hours ago a00c13fb2b32 3
创建了一个名为 resource-limited-pod 的 Pod,并为其配置了严格的资源限制和特定的存储卷挂载规则。这是在生产环境中部署应用时常用的配置,用于确保 Pod 不会过度占用主机资源,并实现数据持久化。例如:
podman pod create \ --name resource-limited-pod \ --memory 2g \ --cpus 4 \ --volume /host/config:/pod/config:ro \ --volume /host/logs:/pod/logs:rw
命令解释:
podman pod create 创建 Pod 的基础命令。
--name resource-limited-pod 为 Pod 指定名称 resource-limited-pod。
--memory 2g 设置 Pod 的内存上限为 2GB。Pod 内所有容器共享这部分内存,总使用量不能超过此限制,否则可能会被系统 OOM killer 终止。
--cpus 4 限制 Pod 可以使用的 CPU 核心数为 4 个。这可以是整数(如 4)或小数(如 2.5),表示 Pod 最多能使用的 CPU 资源比例。
--volume /host/config:/pod/config:ro:
将宿主机的 /host/config 目录挂载到 Pod 内的 /pod/config 目录。
ro 表示 只读(read-only)模式,Pod 内的容器只能读取该目录的内容,无法修改。适用于配置文件等不需要写入的数据。
--volume /host/logs:/pod/logs:rw:
将宿主机的 /host/logs 目录挂载到 Pod 内的 /pod/logs 目录。
rw 表示 读写(read-write)模式,Pod 内的容器可以读取和写入该目录。适用于日志存储等需要持久化的数据。
示例:
# 创建名为 resource-limited-pod 的 Pod # 限制内存为2GB,CPU为4核 C:\Users\Administrator> podman pod create --name resource-limited-pod --memory 2g --cpus 4 --volume /tmp/data/config:/pod/config:ro --volume /tmp/data/logs:/pod/logs:rw 800c46e0d4bb0e2e1f3687ee391a71786ab49a7ee967230073478a776a417b78 # 查看 Pod 列表 C:\Users\Administrator> podman pod ls POD ID NAME STATUS CREATED INFRA ID # OF CONTAINERS 800c46e0d4bb resource-limited-pod Created 5 seconds ago 80169b948720 1 374e9c88dafe my-app-pod Created 5 minutes ago 914eb0c35d15 1 0c9858859aa8 web-redis-pod Exited 17 hours ago a00c13fb2b32 3
下面命令实现了一个完整的 Pod 网络自定义配置流程:首先创建一个独立的自定义网络,然后将新建的 Pod 加入该网络,并为其分配静态 IP 地址和主机名。这种配置方式可以让 Pod 拥有固定的网络标识,便于服务发现和网络管理。例如:
(1)创建自定义网络
# 先创建自定义网络 podman network create my-network
命令解释:
podman network create Podman 创建自定义网络的基础命令。
my-network 自定义网络的名称。创建后,Podman 会在宿主机上生成一个独立的网络命名空间,通常使用 bridge 驱动,提供内部的 DNS 解析和隔离的网络环境。
(2)创建 Pod 并指定网络和 IP
# 创建 Pod 并指定网络和 IP podman pod create \ --name custom-net-pod \ --network my-network \ --ip 10.88.0.10 \ --hostname pod-10
命令解释:
--name custom-net-pod 为 Pod 指定名称 custom-net-pod。
--network my-network 将 Pod 加入刚刚创建的 my-network 自定义网络,而非默认的 podman 网络。
--ip 10.88.0.10 为 Pod 在 my-network 网络中分配一个静态 IP 地址。这确保 Pod 每次启动都使用相同的 IP,便于其他服务稳定访问。
--hostname pod-10 设置 Pod 的主机名为 pod-10。同一自定义网络内的其他容器 / Pod 可以通过这个主机名直接解析到该 Pod 的 IP。
示例:
# 创建自定义网络
C:\Users\Administrator> podman network create my-network
my-network
# 查看自定义网络的IP信息
C:\Users\Administrator> podman network inspect my-network
[
{
"name": "my-network",
"id": "cab427dea9755671133a11cdd47273d9c0b9ef2fc748a3c943eb892b93894db9",
"driver": "bridge",
"network_interface": "podman4",
"created": "2025-11-26T09:59:53.687032594+08:00",
"subnets": [
{
"subnet": "10.89.2.0/24",
"gateway": "10.89.2.1"
}
],
"ipv6_enabled": false,
"internal": false,
"dns_enabled": true,
"ipam_options": {
"driver": "host-local"
},
"containers": {}
}
]
# 创建一个名为 custom-net-pod 的 Pod
C:\Users\Administrator> podman pod create --name custom-net-pod --network my-network --ip 10.89.2.10 --hostname pod-10
2034e27356c2edf961be67365c351be270877641adcfe8077c41f3935a335513
# 列出 Pod 列表
C:\Users\Administrator> podman pod ls
POD ID NAME STATUS CREATED INFRA ID # OF CONTAINERS
2034e27356c2 custom-net-pod Created 4 seconds ago 53250a7299b0 1
800c46e0d4bb resource-limited-pod Created 13 minutes ago 80169b948720 1
374e9c88dafe my-app-pod Created 19 minutes ago 914eb0c35d15 1
0c9858859aa8 web-redis-pod Exited 18 hours ago a00c13fb2b32 3上面简单介绍了如何创建 Pod,以及查看 Pod 的状态,更多 Pod 知识阅读后续章节。