Docker容器迁移

3

我正在尝试使用实验性的检查点功能来在不同机器之间实现容器迁移。我找到了许多关于在同一台机器上进行检查点和恢复的示例,但是我只找到了这篇文档,介绍如何在不同机器之间迁移检查点:

https://circleci.com/blog/checkpoint-and-restore-docker-container-with-criu/

然而,它使用的命令已经过时了,docker checkpoint restore不再可用。应该使用docker start --checkpoint语法。我已经按如下方式完成了我的用例:
主机1:有一个运行的docker容器,我在$CHECKPOINT_FOLDER位置进行检查点,这是不同机器上的共享文件夹,其中包含docker checkpoint create --checkpoint-dir=$CHECKPOINT_FOLDER $NAME checkpoint-$NAME,其中$NAME是正在运行的容器的名称(在本例中为one-13)。
主机2:可以访问$CHECKPOINT_FOLDER文件夹,我可以看到创建的检查点。我运行docker start --checkpoint-dir $CHECKPOINT_FOLDER --checkpoint checkpoint-$NAME $NAME,其中$NAME再次是主机1上正在运行的容器的相同名称(one-13)。但是我收到以下错误:

No such container: one-13

这使我认为我必须在启动检查点之前创建一个容器,但是如何做到呢?难道不应该从检查点自动创建吗?如果不是,是否有一种方法将检查点传递给docker create命令?这种情况下的工作流程是什么?
谢谢。
1个回答

0

在目标主机上恢复容器之前,您必须创建一个容器:

 sudo docker create --name $NAME <container-image>

创建容器 $NAME 的目的是确保基础镜像已下载并分配了磁盘空间,您可以在 /var/lib/docker/containers/ 中进行检查。
然后,您可以使用 $CHECKPOINT_FOLDER 中的共享转储文件进行恢复。
 sudo docker start --checkpoint=checkpoint-$NAME --checkpoint-dir=$CHECKPOINT_FOLDER $NAME

或者具体地说,使用checkpoint-name

 sudo docker start --checkpoint=checkpoint-one-13 --checkpoint-dir=$CHECKPOINT_FOLDER $NAME

1
很遗憾,在运行带有checkpoint-dir的docker start命令时,我收到了“Error response from daemon: custom checkpointdir is not supported”的错误提示。 - Miguel Mota
@MiguelMota:在撰写本文时,我使用的是docker 17.03.2-ce和CRIU v3.8。如果您正在使用更新版本的docker,我认为checkpoint-dir选项已被删除(https://github.com/moby/moby/issues/34601)。您可以忽略checkpoint-dir选项,并让docker存储在默认位置。 - ngovanmao

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接