Docker容器迁移与criu

时间:2015-12-22 21:15:39

标签: docker migration

在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,检查点单独工作。

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

所以: 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

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

答案 2 :(得分:0)

这是我的测试:

跨节点迁移容器。

还原: 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