名称¶
podman-container-checkpoint - 检查点一个或多个正在运行的容器
概要¶
podman container checkpoint [选项] 容器 [容器 …]
描述¶
podman container checkpoint 检查点一个或多个容器中的所有进程。可以使用podman-container-restore从检查点恢复容器。容器 ID 或名称用作输入。
重要:如果容器使用systemd 作为入口点,则可能无法对容器进行检查点。
选项¶
--all, -a¶
检查点所有正在运行的容器。
默认值为false。
重要:此选项不需要容器名称或 ID 作为输入参数。
--compress, -c=zstd | none | gzip¶
指定使用--export, -e选项创建的检查点存档使用的压缩算法。可能的算法是zstd、none 和gzip。
使用none 的一个可能原因是启用更快地创建检查点存档。不压缩检查点存档会导致更快的检查点存档创建。
默认值为zstd。
--create-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=存档¶
将检查点导出到 tar.gz 文件。导出的检查点可用于在另一个系统上导入容器,从而实现容器实时迁移。此检查点存档还包括对容器根文件系统的更改,除非使用--ignore-rootfs明确禁用。
--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 内核的软脏位,该位并非在所有系统上都可用,因为它取决于系统架构和 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.gz -l
保留来自旧转储的容器内存信息并添加新的容器内存信息。
# podman container checkpoint --with-previous -e checkpoint.tar.gz -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 编写