60

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

4

4 回答 4

41

由一位朋友在评论中发表

嗨 Slava,很抱歉您的问题已关闭。作为记录,Slava 正在谈论 docker.io,一个 linux 容器的运行时。是的,docker export是一种合适的方法。它将生成整个容器文件系统状态的 tarball,并将其转储到 stdout。所以

docker export $CONTAINER_ID > $CONTAINER_ID-backup.tar

将产生一个可用的压缩包。您可以使用重新导入 tarball

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

请注意,原始元数据(例如原始图像的 id)将丢失。这应该在未来版本的 docker 中修复。– 所罗门海克斯 2013 年 4 月 2 日在 6:35

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

于 2014-01-24T03:28:48.740 回答
9

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"

于 2015-01-26T07:04:52.550 回答
1

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

docker commit - p <container_id> <backup-name>
于 2018-12-12T00:42:31.757 回答
-2

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

  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. sudo docker images在您的新 docker 机器中检查您的图像

于 2015-01-19T08:54:36.927 回答