跳到主要内容

对一个或多个正在运行的容器进行检查点操作

摘要

podman container checkpoint [选项] 容器 [容器 ...]

描述

podman container checkpoint 对一个或多个 容器 中的所有进程进行检查点操作。可以使用 podman-container-restore 从检查点恢复 容器。使用 容器 ID名称 作为输入。

重要提示:如果容器使用 __systemd__ 作为 __entrypoint__,则可能无法对该容器进行检查点操作。

选项

--all, -a

检查点所有正在运行的 容器。\ 默认值为 false。\ 重要提示:此选项不需要容器名称或 ID 作为输入参数。

--compress, -c=zstd | none | gzip

指定与 --export, -e 选项一起使用的检查点存档所使用的压缩算法。可能的算法有 zstdnonegzip。\ 使用 none 的一个可能原因是启用更快的检查点存档创建。不压缩检查点存档可以加快检查点存档的创建速度。\ 默认值为 zstd

--create-image=image

从正在运行的容器中创建一个检查点镜像。这是一个标准的 OCI 镜像,创建在本地镜像存储中。它包含一个包含所有检查点文件的单个层。此镜像层的内容与使用 --export 创建的检查点格式相同。检查点镜像可以推送到标准容器注册表,并拉取到不同的系统以启用容器迁移。此外,可以使用 podman image save 导出镜像,并使用 podman inspect 检查镜像。检查检查点镜像将显示有关用于执行检查点的主机环境的附加信息,这些信息以注释的形式存储:

选项。

--ignore-rootfs

在导出检查点时忽略根文件系统更改。如果使用了 --export 选项,此选项将只导出 容器 的进程状态,不包括对 容器 的根文件系统的任何更改。这可能会减小导出检查点的大小,但请注意,在导入检查点时,目标系统的 容器 的根文件系统必须与原始系统上的相同。

--leave-running

在成功创建检查点后,不要停止 容器。默认情况下,Podman 在创建检查点后停止 容器。使用此选项,可以在创建检查点后保持 容器 运行。

--tcp-established

在检查点过程中保留已建立的 TCP 连接。

--external-unix-sockets=socket1,socket2,...

指定在检查点过程中要保留的外部 UNIX 套接字列表。这允许在检查点之后恢复 容器 时,外部 UNIX 套接字仍然保持连接状态。

--image-path=path

指定创建检查点镜像时存储镜像的路径。默认情况下,镜像将存储在 Podman 的本地镜像存储中。

--quiet, -q

静默模式,不显示输出信息。

--rm

在成功创建检查点后,删除 容器。这可以与 --leave-running 选项一起使用,以在恢复后自动删除 容器

示例

1. 对名为 mycontainer 的容器进行检查点操作

podman container checkpoint mycontainer

2. 检查点所有正在运行的容器

podman container checkpoint --all

3. 将名为 mycontainer 的容器的检查点导出到 mycontainer.checkpoint.tar.gz 文件中

podman container checkpoint --export=mycontainer.checkpoint.tar.gz mycontainer

4. 创建一个检查点镜像,并将其命名为 mycontainer-checkpoint

podman container checkpoint --create-image=mycontainer-checkpoint mycontainer

请注意,使用 podman container checkpoint 命令进行容器检查点操作时,需要确保 Podman 和 CRIU(Checkpoint/Restore In Userspace)工具的版本兼容,并且主机系统支持检查点功能。同时,某些容器配置或运行的服务可能不支持检查点操作,因此在使用时需要注意检查相关文档和限制。

--file-locks

在检查点操作中包含文件锁。如果容器中的应用程序正在使用文件锁,那么在检查点和恢复过程中需要此选项。否则,包含文件锁的容器检查点操作可能会失败。如果不使用文件锁,则此选项将被忽略。

默认值为 false

#--ignore-rootfs

在将检查点导出为 tar.gz 文件时,可以使用 --ignore-rootfs 选项来明确禁止将根文件系统的更改包含在检查点归档文件中。

默认值为 false

注意:此选项仅与 --export, -e 选项结合使用时有效。

--ignore-volumes

此选项必须与 --export, -e 选项一起使用。

当指定此选项时,与容器关联的卷的内容不会被包含在检查点的 tar.gz 文件中。

默认值为 false

--keep, -k

保留 CRIU 在检查点过程中创建的所有临时日志和统计文件。如果检查点失败,这些文件不会被删除,以便进一步调试。如果检查点成功,这些文件在理论上是不需要的,但如果需要这些文件以供进一步分析,Podman 可以保留这些文件。

默认值为 false

--latest, -l

无需提供容器 ID 或名称,使用最后创建的容器。默认值为 false

注意:此选项在远程 Podman 客户端上不可用,包括 Mac 和 Windows(不包括 WSL2)机器。此选项不需要容器名称或 ID 作为输入参数。

--leave-running, -R

在检查点操作后保持容器运行,而不是停止它。

默认值为 false

--pre-checkpoint, -P

仅转储容器的内存信息,使容器保持运行状态。后续操作将覆盖先前的转储。此选项仅适用于 runc 1.0-rc3 或更高版本。

默认值为 false

仅检查点容器的内存,并在第二个检查点中仅写出自第一个检查点以来已更改的内存页面的功能依赖于 Linux 内核的 soft-dirty 位。该功能并非所有系统都可用,因为它取决于系统架构和 Linux 内核的配置。Podman 会验证当前系统是否支持此功能,如果当前系统不支持,则会返回错误。

--print-stats

打印有关检查点容器(们)的统计信息。输出以 JSON 数组的形式呈现,包含关于不同检查点操作所需时间的信息。许多检查点统计信息由 CRIU 创建,并直接传递给 Podman。JSON 数组中包含以下信息:

  • podman_checkpoint_duration:创建所有检查点所需的总时间(以微秒为单位)。

  • runtime_checkpoint_duration:容器运行时创建检查点所需的时间(以微秒为单位)。

  • freezing_time:CRIU 暂停(冻结)容器内所有进程所需的时间(由 CRIU 测量)。

  • frozen_time:容器内所有进程被暂停的时间(由 CRIU 测量)。

  • memdump_time:从所有容器进程中提取所有所需内存页面所需的时间(由 CRIU 测量)。

  • memwrite_time:将所有所需内存页面写入相应的检查点映像文件所需的时间(由 CRIU 测量)。

  • pages_scanned:扫描以确定是否需要检查点的内存页面数(由 CRIU 测量)。

  • pages_written:实际写入检查点映像文件的内存页面数(由 CRIU 测量)。

默认值为 false

#--tcp-established

为具有已建立 TCP 连接的容器创建检查点。如果检查点映像包含已建立的 TCP 连接,则在恢复时需要使用此选项。默认情况下,不会为具有已建立 TCP 连接的容器创建检查点。

默认值为 false

--with-previous

在预转储(pre-dump)中,使用先前的 criu 映像文件检查容器。此选项仅适用于 runc 1.0-rc3 或更高版本。

默认值为 false

重要提示:此选项不能与 __--pre-checkpoint__ 同时使用

此选项要求之前已在同一容器上使用 __--pre-checkpoint__ 选项。如果没有现有的预检查点,此选项将失败。

关于 __--pre-checkpoint__ 在不同系统上的可用性,请另见 __--pre-checkpoint__ 的附加信息。

*示例

为容器 "mywebserver" 创建检查点。

# podman container checkpoint mywebserver

为容器 "mywebserver" 创建名为 "mywebserver-checkpoint-1" 的检查点映像。

# podman container checkpoint --create-image mywebserver-checkpoint-1 mywebserver

将最新容器的内存信息转储到存档中。

# podman container checkpoint -P -e pre-checkpoint.tar.gz -l

保留较旧转储的容器内存信息,并添加新容器的内存信息。

# podman container checkpoint --with-previous -e checkpoint.tar.gz -l

使用指定的压缩方法将最新容器的内存信息转储到存档中。

请注意,在示例中,-P-e 选项通常与 --pre-checkpoint 一起使用,用于预转储容器的内存信息。而 -l 选项通常用于列出可用的检查点。这里提供的示例可能需要根据实际使用的 Podman 版本和具体需求进行调整。在执行这些命令时,请确保您了解每个选项的含义和用途,并根据您的需要进行适当的配置。

说明

podman container checkpoint 命令用于为运行中的 Podman 容器创建检查点(checkpoint)。检查点是一个包含容器运行时状态的映像,可以在以后用于恢复容器的执行状态。

*选项

  • --tcp-established: 为具有已建立 TCP 连接的容器创建检查点。如果检查点映像包含已建立的 TCP 连接,则在恢复时需要使用此选项。

  • --with-previous: 使用之前的 criu 映像文件检查容器。此选项通常与预转储(pre-dump)结合使用,仅适用于特定版本的 runc 或更高版本。如果之前没有进行过预检查点,则此选项将失败。

示例

# podman container checkpoint -l --compress=none --export=dump.tar

这个命令将列出可用的检查点,并使用无压缩的方式将最新的检查点导出到一个名为 dump.tar 的 tar 文件中。

# podman container checkpoint -l --compress=gzip --export=dump.tar.gz

这个命令同样列出可用的检查点,但是这次使用 gzip 压缩将最新的检查点导出到一个名为 dump.tar.gz 的 gzip 压缩 tar 文件中。

另请参阅

  • podman(1): Podman 命令行工具的主文档。
  • podman-container-restore(1): 用于从检查点恢复 Podman 容器的文档。
  • criu(8): criu(Checkpoint/Restore In Userspace)工具的文档,用于创建和恢复进程的检查点。

历史

注意事项

  • 在使用 podman container checkpoint 命令时,请确保您已经安装了 criu 工具,因为 Podman 依赖 criu 来创建和恢复容器的检查点。
  • 检查点功能可能依赖于特定版本的 runc 或其他容器运行时,因此请确保您的系统满足所有必要的依赖要求。
  • 在恢复容器时,需要确保所有必要的文件、目录和依赖项都是可用的,否则恢复过程可能会失败。
  • 检查点操作可能会对容器的性能产生影响,特别是在大型或高负载的容器中。因此,在生产环境中使用时应谨慎评估其影响。