【问题标题】:Docker Container Migration with criu使用 criu 进行 Docker 容器迁移
【发布时间】:2015-12-22 21:15:39
【问题描述】:

在 Saied Kazemi 的帮助下,我能够通过 docker suspend and resume using criu 在 ubuntu 14 上使用 criu 检查点并迁移容器

现在我正在尝试将此容器从一个位置迁移到另一个位置。

我正在使用这些步骤:

export cid=$(docker run -d ubuntu tail -f /dev/null)
docker exec $cid touch /test.walid
mkdir /tmp/docker-migration
mkdir /tmp/docker-migration/$cid
docker checkpoint --image-dir=/tmp/docker-migration/$cid $cid
ssh walid@192.168.1.10 mkdir /tmp/docker-migration
ssh walid@192.168.1.10 mkdir /tmp/docker-migration/$cid
scp -r /tmp/docker-migration/$cid walid@192.168.1.10:/tmp/docker-migration
ssh walid@192.168.1.10 mkdir /tmp/$cid 
scp -r /var/lib/docker/0.0/containers/$cid walid@192.168.1.13:/tmp
ssh -t walid@192.168.1.10 sudo mv /tmp/$cid /var/lib/docker/0.0/containers/
ssh -t walid@192.168.1.10  sudo docker restore --force=true --image-dir=/tmp/docker-migration/$cid $cid

得到了这个回复

来自守护程序的错误响应:没有这样的容器:fea338e81750b2377c2a845e30c49b7055519e39448091715c2c6a7896da3562 错误:无法恢复一个或多个容器

两台机器都安装了 docker 和 criu,并且 checkpoint 单独工作。

【问题讨论】:

    标签: docker migration


    【解决方案1】:

    使用 CRIU 的 Docker 容器迁移仍在开发中。到目前为止,将检查点和恢复集成到 Docker 的重点一直是在同一台机器上进行 C/R'ing。

    也就是说,可以手动迁移容器,不仅可以通过复制 CRIU 在检查点之后创建的容器映像(如您所做的那样),而且也可以通过复制 Docker 在 / 中创建的容器目录 var/lib/docker/0.0/containers/$cid 以及 /var/lib/docker/0.0/image 中容器的根文件系统。如果您使用的是联合文件系统,如 AUFS 或 OverlayFS,则手动迁移容器的文件系统有点棘手。此外,您需要在目标机器上重新启动 Docker 守护程序才能看到容器。

    【讨论】:

      【解决方案2】:

      在目标机器上,您必须创建或运行一个容器。此容器将被恢复的图像覆盖。

      所以: ssh -t walid@192.168.1.10 export NewID=$(docker run -d ubuntu tail -f /dev/null) ssh -t walid@192.168.1.10 sudo docker restore --force=true --image-dir=/tmp/docker-migration/$cid $newID

      就我而言,这就像一个魅力!

      【讨论】:

      • 这会让你失去容器ID,你在文件系统中更改的任何数据,并检查@Saied Comment
      【解决方案3】:

      这是我的测试:

      跨节点迁移容器。

      恢复: vagrant ssh vm2 -- 'docker run --name=foo -d ubuntu tail -f /dev/null && docker rm -f foo'

      docker create --name=CONTAINNER_NAME base_image
      
      docker restore --force=true --image-dir=/tmp/{dump files} 
      

      github:https://github.com/hixichen/criu_test

      【讨论】:

      • 目前尚不清楚您是否发布了针对 OP 问题的解决方案,或者您遇到了类似的问题并发布了不起作用的代码。你能澄清一下吗?
      • 对不起,我应该说清楚。我遇到了同样的问题,但是当我运行 'docker run --name=foo -d ubuntu tail -f /dev/null && docker rm -f foo '。我得到了正确的恢复。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-15
      • 2020-02-12
      相关资源
      最近更新 更多