跳到主要内容

从检查点恢复容器

简述

podman container restore 从容器检查点或检查点镜像恢复一个或多个容器。使用容器ID、镜像ID或名称作为输入。

描述

podman container restore 会根据给定的容器ID、镜像ID或名称从检查点恢复容器。

选项

--all, -a

恢复所有已检查点化的容器。默认为false此选项不需要输入容器名称或ID。

--file-locks

恢复带有文件锁的容器。此选项是恢复检查点镜像中文件锁所必需的。如果检查点镜像不包含文件锁,此选项会被忽略。默认不恢复文件锁。默认为false

--ignore-rootfs

如果从检查点tar.gz文件恢复容器,可能还会包含根文件系统更改。使用--ignore-rootfs 可以明确禁用将这些根文件系统更改应用到恢复的容器。默认为false此选项仅在与--import, -i一起使用时可用。

--ignore-static-ip

如果容器在启动时使用了--ip 参数,恢复后的容器也会尝试使用相同的IP地址,如果该IP地址已被其他容器占用,恢复将失败。这种情况可能发生在使用--name, -n从导出的检查点多次恢复容器时。

使用--ignore-static-ip 会让Podman在创建容器时忽略配置的IP地址,即使它曾使用--ip

默认值为false

--ignore-static-mac

如果容器在启动时使用了--mac-address 参数,恢复后的容器也会尝试使用相同的MAC地址,如果该地址已被占用,恢复会失败。这种情况可能出现在使用--name, -n从导出的检查点多次恢复容器时。

使用--ignore-static-mac 会让Podman忽略在创建容器时配置的MAC地址。

默认为false

--ignore-volumes

此选项必须与--import, -i一起使用。当使用此选项从检查点tar.gz文件恢复容器时,不会恢复关联卷的内容。

默认为false

--import, -i=file

导入由Podman导出的检查点tar.gz文件。可以用来从其他主机导入已检查点化的容器。 重要提示:此选项不需要输入容器名称或ID。

在导入检查点文件时,Podman会选择与检查点化时相同的容器运行时。特别是当创建容器时指定了特定(非默认)的容器运行时时,这一点尤为重要。如果恢复时指定的容器运行时与创建时不符,Podman将终止恢复过程。

--import-previous=file

导入由Podman导出的预检查点tar.gz文件。此选项需要与-i--import一起使用,并且仅适用于runc 1.0-rc3或更高版本。 重要提示:此选项不支持远程客户端,包括Mac和Windows(排除WSL2)机器。

--keep, -k

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

这包括检查点目录及其在检查点化过程中创建的所有文件。检查点目录所需的大小大致等于检查点化容器所需内存的量。

如果没有--keep, -k选项,检查点将被消耗,无法再次使用。

默认为false

--latest, -l

使用此选项时,无需提供容器ID或名称,而是恢复最近创建的容器。默认为false重要提示:此选项不适用于远程Podman客户端,包括Mac和Windows(排除WSL2)机器。此选项不需要输入容器名称或ID。

--name, -n=name

如果从检查点tar.gz文件恢复容器,可以使用--name, -n为其重命名。这样就可以多次使用不同的名称从检查点恢复同一个容器。

使用--name, -n时,Podman不会尝试分配与之前检查点化时相同的IP地址,因为每个IP地址只能使用一次,而恢复的容器将拥有新的IP地址。这意味着--name, -n不能与--tcp-established一起使用。 重要提示:此选项仅适用于检查点镜像或与--import, -i配合使用。

--pod=name

将容器恢复到名为name的 pod 中。恢复的目标 pod 必须与容器被检查点化的 pod 具有相同的共享命名空间(参阅podman pod create --share)。 重要提示:此选项仅适用于检查点镜像或与--import, -i配合使用。

此选项需要至少CRIU 3.16版本。

--print-stats

输出关于恢复容器的统计信息。输出将以JSON数组格式呈现,包含不同恢复操作所需的时间。许多恢复统计信息由CRIU生成,然后传递给Podman。JSON数组中提供了以下信息:

  • podman_restore_duration: 恢复所有检查点所需的总时间(以微秒计)。
  • runtime_restore_duration: 容器运行时恢复检查点所需的时间(以微秒计)。
  • forking_time: CRIU创建(复制)恢复容器中的所有进程所需的时间(由CRIU测量)(以微秒计)。
  • restore_time: CRIU恢复容器中所有进程所需的时间(由CRIU测量)(以微秒计)。
  • pages_restored: 被恢复的内存页面数量(由CRIU测量)。

默认为false

--publish, -p=port

替换容器在初始启动时配置的端口发布规则,用新的端口转发规则替换。

更多详细信息,请参阅**podman run --publish

--tcp-established

恢复带有已建立TCP连接的容器。如果检查点镜像包含已建立的TCP连接,则在恢复时需要此选项。如果检查点镜像不包含已建立的TCP连接,此选项将被忽略。默认不恢复带有已建立TCP连接的容器。 默认为false

示例

1. 恢复名为"mywebserver"的容器

podman container restore mywebserver

2. 导入检查点文件和预检查点文件

podman container restore --import-previous pre-checkpoint.tar.gz --import checkpoint.tar.gz

3. 启动"mywebserver"容器。创建检查点并导出

podman run --rm -p 2345:80 -d webserver
podman container checkpoint -l --export=dump.tar
podman container restore -p 5432:8080 --import=dump.tar

4. 使用名称"foobar-1"启动容器。创建检查点镜像"foobar-checkpoint",并从镜像中恢复容器,使用不同的名称

podman run --name foobar-1 -d webserver
podman container checkpoint --create-image foobar-checkpoint foobar-1
podman inspect foobar-checkpoint
podman container restore --name foobar-2 foobar-checkpoint
podman container restore --name foobar-3 foobar-checkpoint

参考

历史

2018年9月,最初由Adrian Reber编写。