Podman 教程

Podman Pod 启动、停止和重启

在 Podman 中,Pod 和容器一样,也支持启动、停止和重启。注意,Pod 的启动/停止/重启将会导致 Pod 下面所有容器都启动/停止/重启。

Pod 状态

在学习 Pod 启动、停止和重启命令前,需明确 Pod 状态与操作的对应关系,避免误操作导致数据丢失或服务中断:

  • Created(已创建):Pod 已经被创建,但其中的容器尚未启动或正在初始化。这是 Pod 创建后的初始状态。使用 podman pod create 命令创建了 Pod,但还未启动;或 Pod 刚刚被创建,容器正在配置中。

  • Running(运行中):Pod 中的所有容器都处于正常运行状态,Pod 功能正常。

  • Paused(已暂停):Pod 中的所有容器都被暂停,进程停止运行,但内存状态保留,可恢复。执行了 podman pod pause 命令,或系统资源不足时被暂停。

  • Exited(已退出):Pod 中的所有容器都已停止运行并退出。可能是正常停止,也可能是异常退出。执行了 podman pod stop 命令;容器进程运行结束;容器崩溃或异常退出。

  • Degraded(降级):Pod 中至少有一个容器异常(如崩溃、退出或无法启动),但其他容器仍在运行,Pod 功能部分受损。Pod 内某个容器启动失败、进程崩溃,或依赖的资源不可用。

Pod 对应容器状态

下面表格列出了 Pod 各个状态对应的容器状态:

Pod 状态

描述

对应容器状态

Running

Pod 内至少有一个容器处于运行状态

至少一个容器为 Up

Exited

Pod 内所有容器都已退出(包括正常停止或异常退出)

所有容器为 Exited

Created

Pod 已创建但容器尚未启动

容器为 Created

Paused

Pod 内所有容器都已暂停

所有容器为 Paused

Degraded

Pod 内部分容器运行、部分容器退出(混合状态)

容器状态不一致

注意:停止/重启 Pod 不会删除 Pod 本身及关联的数据卷,仅改变容器运行状态。强制终止适用于无响应的 Pod。

Pod 启动操作

podman pod start 命令用于启动一个或多个处于 Exited、Created 或 Paused 状态的 Pod,以及其中的所有容器。

命令语法

Pod 启动语法如下:

podman pod start [选项] POD [POD...]

常用选项:

  • -a, --all    启动所有处于停止状态的 Pod

  • --pod-id-file    从文件读取 Pod ID 进行启动

点击查看 podman pod start 命令手册

常用示例

(1)启动单个 Pod

# 通过名称启动
# 查看 Pod 列表
C:\Users\Administrator> podman pod ls
POD ID        NAME           STATUS      CREATED            INFRA ID      # OF CONTAINERS
e58becbb090f  my-pod         Degraded    About an hour ago  bc7cf1904863  2
0c9858859aa8  web-redis-pod  Running     47 hours ago       a00c13fb2b32  3

# 根据名称启动Pod,启动名为 my-pod 的 Pod
C:\Users\Administrator> podman pod start my-pod
my-pod

# 查看 Pod 列表,名为 my-pod 的 Pod 状态为 Running
C:\Users\Administrator> podman pod ls
POD ID        NAME           STATUS      CREATED            INFRA ID      # OF CONTAINERS
e58becbb090f  my-pod         Running     About an hour ago  bc7cf1904863  2
0c9858859aa8  web-redis-pod  Running     47 hours ago       a00c13fb2b32  3


# 通过 ID 启动
C:\Users\Administrator> podman pod ls
POD ID        NAME           STATUS      CREATED            INFRA ID      # OF CONTAINERS
e58becbb090f  my-pod         Exited      About an hour ago  bc7cf1904863  2
0c9858859aa8  web-redis-pod  Running     47 hours ago       a00c13fb2b32  3

# 根据 Pod 的 Id(e58becbb090f) 启动
C:\Users\Administrator> podman pod start e58becbb090f
my-pod

C:\Users\Administrator> podman pod ls
POD ID        NAME           STATUS      CREATED            INFRA ID      # OF CONTAINERS
e58becbb090f  my-pod         Running     About an hour ago  bc7cf1904863  2
0c9858859aa8  web-redis-pod  Running     47 hours ago       a00c13fb2b32  3

(2)启动多个 Pod

# 启动多个指定的 Pod
C:\Users\Administrator> podman pod start my-pod web-redis-pod
my-pod
web-redis-pod

# 启动所有停止的 Pod
C:\Users\Administrator> podman pod start -a
web-redis-pod
my-pod

# 根据ID启动Pod
[user@CDLPF2YBXYD ~]$ podman pod ls
POD ID        NAME           STATUS      CREATED            INFRA ID      # OF CONTAINERS
e58becbb090f  my-pod         Exited      About an hour ago  bc7cf1904863  2
0c9858859aa8  web-redis-pod  Running     47 hours ago       a00c13fb2b32  3
# 启动所有状态为 status=exited 的 Pod
[user@CDLPF2YBXYD ~]$ podman pod start $(podman pod ls --filter status=exited -q)
my-pod
# 看见名为 my-pod 的状态为 Runing
[user@CDLPF2YBXYD ~]$ podman pod ls
POD ID        NAME           STATUS      CREATED            INFRA ID      # OF CONTAINERS
e58becbb090f  my-pod         Running     About an hour ago  bc7cf1904863  2
0c9858859aa8  web-redis-pod  Running     47 hours ago       a00c13fb2b32  3

Pod 停止操作

停止一个或多个运行中的 Pod,本质是向 Pod 内所有容器发送 SIGTERM 信号(优雅终止),等待容器处理完当前任务后退出。若容器未在指定时间内退出,可自动发送 SIGKILL 信号强制终止。

命令语法

Pod 停止操作命令语法如下:

podman pod stop [选项] <Pod名称/ID/部分ID>...

常用选项:

  • -a, --all    停止所有运行中的 Pod(慎用!避免影响无关服务)

  • -t, --time <秒数>    优雅停止等待时间(默认 10 秒),超时后强制终止(相当于 docker stop -t)

点击查看 podman pod stop 命令手册

常用示例

(1)停止单个指定 Pod(优雅终止)

# 先查看运行中的 Pod(获取名称/ID)
C:\Users\Administrator> podman pod ls
POD ID        NAME           STATUS      CREATED       INFRA ID      # OF CONTAINERS
f5098ffc83c4  my-pod         Created     24 hours ago  eb505ad7a250  2
0c9858859aa8  web-redis-pod  Running     46 hours ago  a00c13fb2b32  3

# 停止名为 web-redis-pod 的 Pod(默认等待 10 秒)
C:\Users\Administrator> podman pod stop web-redis-pod
web-redis-pod

# 验证停止结果(STATUS 变为 Exited)
C:\Users\Administrator> podman pod ls
POD ID        NAME           STATUS      CREATED       INFRA ID      # OF CONTAINERS
f5098ffc83c4  my-pod         Created     24 hours ago  eb505ad7a250  2
0c9858859aa8  web-redis-pod  Exited      46 hours ago  a00c13fb2b32  3

(2)停止多个 Pod(按 ID / 名称批量操作)

# 停止多个 Pod(用空格分隔 ID/名称)
# 查看 Pod 状态
C:\Users\Administrator> podman pod ls
POD ID        NAME           STATUS      CREATED        INFRA ID      # OF CONTAINERS
e58becbb090f  my-pod         Running     4 minutes ago  bc7cf1904863  2
0c9858859aa8  web-redis-pod  Running     46 hours ago   a00c13fb2b32  3

# 停止名为 my-pod 和 web-redis-pod 的 Pod
C:\Users\Administrator> podman pod stop my-pod web-redis-pod
my-pod
web-redis-pod

# 查看状态, my-pod 和 web-redis-pod 的 Pod 状态变为 Exited
C:\Users\Administrator> podman pod ls
POD ID        NAME           STATUS      CREATED        INFRA ID      # OF CONTAINERS
e58becbb090f  my-pod         Exited      5 minutes ago  bc7cf1904863  2
0c9858859aa8  web-redis-pod  Exited      46 hours ago   a00c13fb2b32  3

(3)使用 -a 选项,停止所有 pod

# 停止所有运行中的 Pod(谨慎使用!)
# 查看 Pod 状态
C:\Users\Administrator> podman pod ls
POD ID        NAME           STATUS      CREATED        INFRA ID      # OF CONTAINERS
e58becbb090f  my-pod         Running     8 minutes ago  bc7cf1904863  2
0c9858859aa8  web-redis-pod  Running     46 hours ago   a00c13fb2b32  3

# 停止所有 Pod
C:\Users\Administrator> podman pod stop -a
web-redis-pod
my-pod

# 查看状态,Pod 状态变为 Exited
C:\Users\Administrator> podman pod ls
POD ID        NAME           STATUS      CREATED        INFRA ID      # OF CONTAINERS
e58becbb090f  my-pod         Exited      8 minutes ago  bc7cf1904863  2
0c9858859aa8  web-redis-pod  Exited      46 hours ago   a00c13fb2b32  3

(4)自定义优雅停止时间

# 查看 Pod 状态
C:\Users\Administrator> podman pod ls
POD ID        NAME           STATUS      CREATED        INFRA ID      # OF CONTAINERS
e58becbb090f  my-pod         Running     9 minutes ago  bc7cf1904863  2
0c9858859aa8  web-redis-pod  Running     46 hours ago   a00c13fb2b32  3

# 给 Pod 30 秒时间处理完任务后停止(适用于数据库、消息队列等需要关闭连接的服务)
C:\Users\Administrator> podman pod stop -t 30 web-redis-pod
web-redis-pod

# 查看 Pod 状态,web-redis-pod 状态为 Exited
C:\Users\Administrator> podman pod ls
POD ID        NAME           STATUS      CREATED        INFRA ID      # OF CONTAINERS
e58becbb090f  my-pod         Running     9 minutes ago  bc7cf1904863  2
0c9858859aa8  web-redis-pod  Exited      46 hours ago   a00c13fb2b32  3

Pod 重启操作

重启一个或多个 Pod(无论当前状态是 running 还是 exited):

  • 若 Pod 已停止 / 退出:直接启动 Pod 内所有容器。

  • 若 Pod 正在运行:先停止 Pod(优雅终止),再重新启动所有容器。

命令语法

Pod 重启语法如下:

podman pod restart [选项] <Pod名称/ID/部分ID>...

常用选项:

  • -a, --all 重启所有 Pod(包括停止、运行中、退出状态的 Pod)

点击查看 podman pod restart 命令手册

常用示例

(1)重启单个运行中的 Pod(修复配置或服务异常)

# 重启名为 my-app-pod 的 Pod(先停止再启动)
podman pod restart my-app-pod

(2)重启多个停止的 Pod

# 重启多个已停止的 Pod(按 ID 批量操作)
podman pod restart abc123 def456

# 重启所有 Pod(慎用!)
podman pod restart -a

Pod 暂停和恢复

Pod 暂停

暂停指定 Pod 内的所有容器进程,使其进入暂停状态。暂停的 Pod 不会占用 CPU 资源,但仍会保留内存和网络端口等资源,容器的文件系统状态也会被完整保留。

命令语法

Pod 暂停语法如下:

podman pod pause [选项] POD [POD...]

常用选项:

  • -a, --all 暂停所有运行中的 Pod

点击查看 podman pod pause 命令手册

常用示例

(1)暂停单个 Pod

# 查看当前运行的 Pod
C:\Users\Administrator> podman pod ls
POD ID        NAME           STATUS      CREATED         INFRA ID      # OF CONTAINERS
e58becbb090f  my-pod         Running     29 minutes ago  bc7cf1904863  2
0c9858859aa8  web-redis-pod  Running     47 hours ago    a00c13fb2b32  3

# 暂停名为 my-pod 的 Pod
C:\Users\Administrator> podman pod pause my-pod
e58becbb090fe2a4167a8ed2f0097307ca060e9e74e07f6849a8bcd3c45441b9

# 验证 Pod 状态(STATUS 会显示为 "paused")
C:\Users\Administrator> podman pod ls
POD ID        NAME           STATUS      CREATED         INFRA ID      # OF CONTAINERS
e58becbb090f  my-pod         Paused      30 minutes ago  bc7cf1904863  2
0c9858859aa8  web-redis-pod  Running     47 hours ago    a00c13fb2b32  3

(2)暂停多个 Pod

# 暂停多个指定的 Pod(通过 ID 或名称)
C:\Users\Administrator> podman pod ls
POD ID        NAME           STATUS      CREATED         INFRA ID      # OF CONTAINERS
e58becbb090f  my-pod         Running     31 minutes ago  bc7cf1904863  2
0c9858859aa8  web-redis-pod  Running     47 hours ago    a00c13fb2b32  3

# 暂停名为 my-pod 和 web-redis-pod 的 Pod
C:\Users\Administrator> podman pod pause my-pod web-redis-pod
e58becbb090fe2a4167a8ed2f0097307ca060e9e74e07f6849a8bcd3c45441b9
0c9858859aa8e97fefa2b4839cc1c0f4c589ed40aca1840cbfd66b8f49eae31e

# 查看 my-pod 和 web-redis-pod 的 Pod 状态为 Paused
C:\Users\Administrator> podman pod ls
POD ID        NAME           STATUS      CREATED         INFRA ID      # OF CONTAINERS
e58becbb090f  my-pod         Paused      31 minutes ago  bc7cf1904863  2
0c9858859aa8  web-redis-pod  Paused      47 hours ago    a00c13fb2b32  3


# 暂停所有运行中的 Pod
# 列出 Pod
C:\Users\Administrator> podman pod ls
POD ID        NAME           STATUS      CREATED         INFRA ID      # OF CONTAINERS
e58becbb090f  my-pod         Running     32 minutes ago  bc7cf1904863  2
0c9858859aa8  web-redis-pod  Running     47 hours ago    a00c13fb2b32  3

# 暂停所有运行中的 Pod
C:\Users\Administrator> podman pod pause -a
0c9858859aa8e97fefa2b4839cc1c0f4c589ed40aca1840cbfd66b8f49eae31e
e58becbb090fe2a4167a8ed2f0097307ca060e9e74e07f6849a8bcd3c45441b9

# 所有 Pod 状态均为 Paused
C:\Users\Administrator> podman pod ls
POD ID        NAME           STATUS      CREATED         INFRA ID      # OF CONTAINERS
e58becbb090f  my-pod         Paused      32 minutes ago  bc7cf1904863  2
0c9858859aa8  web-redis-pod  Paused      47 hours ago    a00c13fb2b32  3

Pod 恢复

恢复被暂停的 Pod 内所有容器的运行,使其从暂停状态回到运行状态。恢复后的 Pod 会继续使用之前的资源,容器内的进程也会从暂停点继续执行。

命令语法

Pod 恢复的语法如下:

podman pod unpause [选项] POD [POD...]

常用选项:

  • -a, --all 恢复所有被暂停的 Pod

点击查看 podman pod unpause 命令手册

常用示例

(1)恢复单个暂停的 Pod

# 查看 Pod 列表
C:\Users\Administrator> podman pod ls
POD ID        NAME           STATUS      CREATED         INFRA ID      # OF CONTAINERS
e58becbb090f  my-pod         Paused      41 minutes ago  bc7cf1904863  2
0c9858859aa8  web-redis-pod  Paused      47 hours ago    a00c13fb2b32  3

# 恢复名为 my-pod 的 Pod
C:\Users\Administrator> podman pod unpause my-pod
e58becbb090fe2a4167a8ed2f0097307ca060e9e74e07f6849a8bcd3c45441b9

# 验证 Pod 状态(STATUS 会恢复为 "running")
C:\Users\Administrator> podman pod ls
POD ID        NAME           STATUS      CREATED         INFRA ID      # OF CONTAINERS
e58becbb090f  my-pod         Running     41 minutes ago  bc7cf1904863  2
0c9858859aa8  web-redis-pod  Paused      47 hours ago    a00c13fb2b32  3

(2) 恢复所有暂停的 Pod

# 查看 pod 列表
C:\Users\Administrator> podman pod ls
POD ID        NAME           STATUS      CREATED         INFRA ID      # OF CONTAINERS
e58becbb090f  my-pod         Paused      44 minutes ago  bc7cf1904863  2
0c9858859aa8  web-redis-pod  Paused      47 hours ago    a00c13fb2b32  3

# 恢复所有被暂停的 Pod
C:\Users\Administrator> podman pod unpause -a
0c9858859aa8e97fefa2b4839cc1c0f4c589ed40aca1840cbfd66b8f49eae31e
e58becbb090fe2a4167a8ed2f0097307ca060e9e74e07f6849a8bcd3c45441b9

# 查看恢复后的 Pod
C:\Users\Administrator> podman pod ls
POD ID        NAME           STATUS      CREATED         INFRA ID      # OF CONTAINERS
e58becbb090f  my-pod         Running     44 minutes ago  bc7cf1904863  2
0c9858859aa8  web-redis-pod  Running     47 hours ago    a00c13fb2b32  3

与 stop/start 的区别

下面将介绍 Podman 中“暂停/恢复”与“启动/停止”的区别:

特性

pause/unpause

stop/start

资源占用

保留内存、网络等资源,仅释放 CPU

释放几乎所有资源

启动速度

极快(毫秒级)

较慢(需要重新初始化容器)

进程状态

进程被冻结,恢复后继续执行

进程完全终止,启动后重新开始

适用场景

临时暂停、资源调配、故障排查

服务更新、配置修改、长期停止

注意:

  • podman pod pause 临时挂起 Pod 内所有容器,保留资源和状态,适合短时间暂停服务。

  • podman pod unpause 恢复被暂停的 Pod,使其快速回到运行状态。

  • 暂停 / 恢复操作比停止 / 启动更轻量、更快,适用于临时资源管理和故障排查场景。

Pod 强制终止操作

直接向 Pod 内所有容器发送指定信号(默认 SIGKILL),强制终止 Pod 运行,适用于:

  • podman pod stop 无法停止的无响应 Pod。

  • 需要紧急终止 Pod 以避免资源占用或数据损坏。

命令语法

Pod 强制终止语法如下:

podman pod kill [选项] <Pod名称/ID>...

常用选项:

  • -s, --signal <信号> 指定发送的信号(如 SIGINT、SIGTERM、SIGKILL,默认 SIGKILL)

  • -a, --all 强制终止所有 Pod(极其危险!仅在紧急故障排查时使用)

点击查看 podman pod kill 命令手册

常用示例

(1)强制终止无响应的 Pod(默认发送 SIGKILL)

# 查看 Pod 列表
C:\Users\Administrator> podman pod ls
POD ID        NAME           STATUS      CREATED         INFRA ID      # OF CONTAINERS
e58becbb090f  my-pod         Running     50 minutes ago  bc7cf1904863  2
0c9858859aa8  web-redis-pod  Running     47 hours ago    a00c13fb2b32  3

# 强制终止名为 my-pod 的 Pod(默认发送 SIGKILL)
C:\Users\Administrator> podman pod kill my-pod
e58becbb090fe2a4167a8ed2f0097307ca060e9e74e07f6849a8bcd3c45441b9

# 查看 Pod 列表(名为 my-pod 的 Pod 状态为 Exited)
C:\Users\Administrator> podman pod ls
POD ID        NAME           STATUS      CREATED         INFRA ID      # OF CONTAINERS
e58becbb090f  my-pod         Exited      50 minutes ago  bc7cf1904863  2
0c9858859aa8  web-redis-pod  Running     47 hours ago    a00c13fb2b32  3

(2)发送 SIGINT 信号(相当于 Ctrl+C)强制终止 Pod

# 查看 Pod 列表
C:\Users\Administrator> podman pod ls
POD ID        NAME           STATUS      CREATED         INFRA ID      # OF CONTAINERS
e58becbb090f  my-pod         Running     52 minutes ago  bc7cf1904863  2
0c9858859aa8  web-redis-pod  Running     47 hours ago    a00c13fb2b32  3

# 发送 SIGINT 信号(相当于 Ctrl+C)强制终止 Pod
C:\Users\Administrator> podman pod kill -s SIGINT my-pod
e58becbb090fe2a4167a8ed2f0097307ca060e9e74e07f6849a8bcd3c45441b9

# 查看 Pod 列表(名为 my-pod 的 Pod 状态为 Degraded)
C:\Users\Administrator> podman pod ls
POD ID        NAME           STATUS      CREATED         INFRA ID      # OF CONTAINERS
e58becbb090f  my-pod         Degraded    52 minutes ago  bc7cf1904863  2
0c9858859aa8  web-redis-pod  Running     47 hours ago    a00c13fb2b32  3

停止 vs 重启 vs 强制终止

下面是停止、重启和强制终止使用场景、数据安全性等:

操作

适用场景

数据安全性

底层信号

podman pod stop

正常停止运行中的 Pod(优雅终止)

高(等待任务完成)

先 SIGTERM,超时 SIGKILL

podman pod restart

重启 Pod(修复异常、应用配置)

中(依赖容器重启策略)

先 SIGTERM,再启动

podman pod kill

无响应 Pod 强制终止(紧急情况)

低(可能丢失未持久化数据)

直接 SIGKILL(默认)

注意事项

  • 停止 / 重启 Pod 时,数据卷中的数据不会丢失,但容器内未持久化的数据(如 /tmp 目录、内存数据)会丢失;

  • 数据库、消息队列等有状态服务,重启前建议先备份数据,或通过 -t 选项延长停止等待时间,避免连接中断导致数据损坏。

  

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
其他应用
公众号