运行中的Docker容器如何备份?

60

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


16
嗨Slava,很抱歉你的问题已经关闭。记录一下,Slava谈论的是http://docker.io,一个用于Linux容器的运行时。是的,“docker export”是一个适当的方法。它将生成一个容器文件系统状态的tarball,并将其转储到标准输出中。因此,“docker export $CONTAINER_ID > $CONTAINER_ID-backup.tar”将产生一个可用的tarball。您可以使用“docker import -slava/$CONTAINER_ID-backup < $CONTAINER_ID-backup.tar”重新导入tarball。请注意,原始元数据(例如原始镜像的ID)将丢失。这应该在未来的docker版本中修复。 - Solomon Hykes
4
请问需要翻译的内容是:“@SolomonHykes One more clarification - will it yield a LVM-snapshot-like tarball or just a regular tarball with data changing during the tar?” - Slava V
还可以查看 https://github.com/dotcloud/docker/issues/2116,其中讨论了该问题的一部分。 - Uli Köhler
还要看一下我对相关问题的回答:https://dev59.com/M14d5IYBdhLWcg3wAelX#27289457 - RoyB
4个回答

42

一位朋友在评论中发表了观点

嗨,斯拉瓦,很抱歉你的问题被关闭了。记录一下,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 Apr 2 '13 at 6:35

添加在此处方便大家从摘要中找到已回答的问题。谢谢Solomon!


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"


1
使用docker commit是我备份容器(启动或停止)的首选方式。创建一个可以命名的镜像:
docker commit - p <container_id> <backup-name>

-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. 在新的 Docker 机器上,使用 sudo docker images 检查您的镜像


10
我认为保存/加载涉及到 图像,但这个问题涉及到 正在运行的容器 - semicircle21
我已经保存/加载了数据库镜像,但当我加载它时,没有任何表格。 - mokiSRB

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接