备份正在运行的Docker容器?

是否有可能备份正在运行的Docker容器? export指令是否适合这样做?

由一位朋友发表评论

嗨,斯拉瓦,对不起,你的问题已经结束了。 为了logging,Slava在谈论docker.io,一个Linux容器的运行时。 是的, docker export是一个合适的方法。 它会生成你的整个容器文件系统状态的tarball,并将其转储到标准输出。 所以

docker export $CONTAINER_ID > $CONTAINER_ID-backup.tar

将产生一个可用的tarball。 你可以重新导入tarball

docker import - slava/$CONTAINER_ID-backup < $CONTAINER_ID-backup.tar

请注意,原始元数据(例如原始图像的ID)将会丢失。 这应该在未来版本的docker中修复。 所罗门Hykes 4月2 '13在6:35

在这里添加这样一个人可以从总结中发现问题得到了回答。 谢谢所罗门!

export有一些限制:它不会导出数据量

这里的数据量意味着:

  1. 在图像的Dockerfile中定义了一个VOLUME
  2. 容器是以这样的参数开始的: -v /webapp

有关数据的更多信息: https : //docs.docker.com/userguide/dockervolumes/

处理这种情况的方法是使用“ –volumes-from ”参数启动一个新容器,以便挂接该容器,以便访问数据卷。

例子:

  1. 访问数据:(在bash中)

docker run -it --volumes-from target_container ubuntu bash

  1. 备份到主机:(一个postgres容器)

docker run -it --volumes-from some_postgres -v /host/path:/container/path --rm ubuntu bash -c "tar -cvf /container/path/postgres-backup.tar /var/lib/postgresql/data"

你也可以使用保存和加载..这里的示例

  1. sudo docker images

     awan@google-dev:~/StarCenter/_docker$ sudo docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE google_star/_version_1.10 latest 1067d6689697b2 4 days ago 1.666 GB 
  2. sudo docker save google_star/_version_1.10 > my_docker-backup.tgz

  3. 使用( sudo docker load < my_docker-backup.tgz )恢复它

  4. 使用您的新docker机中的sudo docker images检查您的图像