名称¶
podman-container-checkpoint - 检查点一个或多个正在运行的容器
简介¶
podman container checkpoint [选项] 容器 [容器 …]
描述¶
podman container checkpoint 对一个或多个容器中的所有进程创建检查点。容器可以通过 podman-container-restore 从检查点恢复。使用容器 ID 或名称作为输入。
重要提示:如果容器使用 systemd 作为 entrypoint,则可能无法对容器进行检查点。
选项¶
--all, -a¶
对所有正在运行的容器创建检查点。
默认值为 false。
重要提示:此选项不需要容器名称或 ID 作为输入参数。
--compress, -c=zstd | none | gzip¶
指定用于通过 --export, -e 选项创建的检查点归档的压缩算法。可能的算法有 zstd、none 和 gzip。
使用 none 的一个可能原因是启用更快的检查点归档创建。不压缩检查点归档可以导致更快的检查点归档创建。
默认值为 zstd。
--create-image=image¶
从正在运行的容器创建检查点镜像。这是一个在本地镜像存储中创建的标准 OCI 镜像。它由一个包含所有检查点文件的单一层组成。此镜像层的内容格式与使用 --export 创建的检查点相同。检查点镜像可以推送到标准容器注册表,并在不同的系统上拉取以实现容器迁移。此外,镜像可以使用 podman image save 导出,并使用 podman inspect 检查。检查检查点镜像会显示额外的信息,作为注释存储,这些信息是关于用于创建检查点的主机环境的
io.podman.annotations.checkpoint.name: 原始容器的可读名称。
io.podman.annotations.checkpoint.rawImageName: 用于创建原始容器的镜像的未处理名称(由用户指定)。
io.podman.annotations.checkpoint.rootfsImageID: 用于创建原始容器的镜像 ID。
io.podman.annotations.checkpoint.rootfsImageName: 用于创建原始容器的镜像名称。
io.podman.annotations.checkpoint.podman.version: 用于创建检查点的 Podman 版本。
io.podman.annotations.checkpoint.criu.version: 用于创建检查点的 CRIU 版本。
io.podman.annotations.checkpoint.runtime.name: 用于创建检查点的容器运行时(例如,runc、crun)。
io.podman.annotations.checkpoint.runtime.version: 用于创建检查点的容器运行时版本。
io.podman.annotations.checkpoint.conmon.version: 与原始容器一起使用的 conmon 版本。
io.podman.annotations.checkpoint.host.arch: 创建检查点的主机的 CPU 架构。
io.podman.annotations.checkpoint.host.kernel: 创建检查点的主机的 Linux 内核版本。
io.podman.annotations.checkpoint.cgroups.version: 创建检查点的主机使用的 cgroup 版本。
io.podman.annotations.checkpoint.distribution.version: 创建检查点的主机发行版版本。
io.podman.annotations.checkpoint.distribution.name: 创建检查点的主机发行版名称。
--export, -e=archive¶
将检查点导出到归档。归档类型由 --compress 指定。导出的检查点可用于在另一个系统上导入容器,从而实现容器实时迁移。如果未明确使用 --ignore-rootfs 禁用,此检查点归档还包括对容器根文件系统的所有更改。
--file-locks¶
对带有文件锁的容器创建检查点。如果容器中运行的应用程序正在使用文件锁,则在检查点和恢复期间需要此选项。否则,对带有文件锁的容器创建检查点预计会失败。如果未使用文件锁,则此选项将被忽略。
默认值为 false。
--ignore-rootfs¶
如果检查点被导出到归档,则可以通过 --ignore-rootfs 明确禁用将对根文件系统的更改包含到检查点归档文件中。
默认值为 false。
重要提示:此选项仅与 --export, -e 结合使用。
--ignore-volumes¶
此选项必须与 --export, -e 选项结合使用。当指定此选项时,与容器关联的卷内容不包含在检查点归档中。
默认值为 false。
--keep, -k¶
保留 CRIU 在检查点期间创建的所有临时日志和统计文件。如果检查点失败,这些文件不会被删除以供进一步调试。如果检查点成功,理论上不需要这些文件,但如果需要这些文件,Podman 可以保留这些文件以供进一步分析。
默认值为 false。
--latest, -l¶
不是提供容器 ID 或名称,而是使用最后创建的容器。默认值为 false。重要提示:此选项不适用于远程 Podman 客户端,包括 Mac 和 Windows(不包括 WSL2)机器。此选项不需要容器名称或 ID 作为输入参数。
--leave-running, -R¶
在检查点后让容器保持运行,而不是停止它。
默认值为 false。
--pre-checkpoint, -P¶
仅转储容器的内存信息,让容器保持运行。后续操作会覆盖先前的转储。
默认值为 false。
仅对容器内存进行检查点,并在第二次检查点中仅写入自第一次检查点以来发生变化的内存页面的功能依赖于 Linux 内核的软脏位,这并非在所有系统上都可用,因为它取决于系统架构和 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¶
在预转储中,使用以前的 criu 镜像文件检查容器。它仅适用于 runc 1.0-rc3
或 更高版本
。
默认值为 false。
重要提示:此选项不与 --pre-checkpoint 一起使用.
此选项要求之前在同一容器上使用过 --pre-checkpoint 选项。如果没有现有的预检查点,此选项将失败。
另请参阅 --pre-checkpoint,以获取有关 --pre-checkpoint 在不同系统上的可用性的更多信息。
示例¶
为容器“mywebserver”创建检查点。
# podman container checkpoint mywebserver
为容器“mywebserver”创建检查点镜像。
# podman container checkpoint --create-image mywebserver-checkpoint-1 mywebserver
将最新容器的内存信息转储到归档中。
# podman container checkpoint -P -e pre-checkpoint.tar.zst -l
保留旧转储中的容器内存信息,并添加新容器的内存信息。
# podman container checkpoint --with-previous -e checkpoint.tar.zst -l
使用指定的压缩方法将最新容器的内存信息转储到归档中。
# podman container checkpoint -l --compress=none --export=dump.tar
# podman container checkpoint -l --compress=gzip --export=dump.tar.gz
另请参阅¶
podman(1), podman-container-restore(1), criu(8)
历史¶
2018 年 9 月,最初由 Adrian Reber areber@redhat.com 编译