备份正在运行的Docker容器?

时间:2013-03-29 09:54:33

标签: linux docker linux-containers

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

4 个答案:

答案 0 :(得分:36)

由一位朋友发表评论

嗨Slava,抱歉你的问题已经结束了。为了记录,Slava谈论的是docker.io,一个Linux容器的运行时。是的,docker export是一种合适的方法。它将生成整个容器文件系统状态的tarball,并将其转储到stdout上。所以

docker export $CONTAINER_ID > $CONTAINER_ID-backup.tar

将产生可用的tarball。您可以使用

重新导入tarball

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

请注意原始元数据(例如原始图像的ID)将丢失。这应该在未来版本的docker中修复。 - Solomon Hykes 2013年4月2日6:35

在此处添加,以便从摘要中找到问题已得到解答。谢谢所罗门!

答案 1 :(得分:7)

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

这里的数据量意味着:

  1. 图像的Dockerfile中定义了VOLUME
  2. 容器以如下参数开头:-v /webapp
  3. 有关数据的更多信息:https://docs.docker.com/userguide/dockervolumes/

    处理这种情况的方法是启动一个新容器,其中包含“ - volumes-from ”参数以挂钩该容器,因此您可以访问该数据卷。

    示例:

    1. 访问数据:(在bash中)
    2. docker run -it --volumes-from target_container ubuntu bash

      1. 备份到主机:(一个postgres容器)
      2. 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"

答案 2 :(得分:0)

使用docker commit是备份容器(启动或停止)的首选方法。创建一个可以命名的图像:

docker commit - p <container_id> <backup-name>

答案 3 :(得分:-1)

你也可以使用保存和加载..这是样本

  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. 恢复它
  5. 使用新的泊坞机中的sudo docker images检查图像