备份一个正在运行的 Docker 容器?

Posted

技术标签:

【中文标题】备份一个正在运行的 Docker 容器?【英文标题】:Backup a running Docker container? 【发布时间】:2013-03-20 00:26:57 【问题描述】:

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

【问题讨论】:

您好 Slava,很抱歉您的问题已关闭。作为记录,Slava 正在谈论docker.io,一个 linux 容器的运行时。是的,“码头出口”是一种合适的方法。它将生成整个容器文件系统状态的 tarball,并将其转储到 stdout。所以“docker export $CONTAINER_ID > $CONTAINER_ID-backup.tar”会产生一个可用的压缩包。您可以使用“docker import - slava/$CONTAINER_ID-backup @SolomonHykes 非常感谢! @SolomonHykes 再澄清一点 - 它会产生类似 LVM 快照的 tarball 还是只是在 tar 期间数据发生变化的常规 tarball? 也可以看看github.com/dotcloud/docker/issues/2116,部分问题在那里讨论 也看看我对相关问题的回答:***.com/questions/27288070/… 【参考方案1】:

由 cmets 中的一位朋友发布

您好 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 中修复。 – Solomon Hykes 2013 年 4 月 2 日 6:35

在此处添加以便人们可以从摘要中找到已回答的问题。谢谢所罗门!

【讨论】:

【参考方案2】:

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

这里的数据量的意思是:

    在映像的 Dockerfile 中定义了一个 VOLUME。 容器以这样的参数开始:-v /webapp

更多关于数据:https://docs.docker.com/userguide/dockervolumes/

处理这种情况的方法是启动一个带有'--volumes-from'参数的新容器来挂钩该容器,这样你就可以访问数据卷了。

例子:

    访问数据:(在 bash 中)

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

    备份到主机:(一个 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"

【讨论】:

【参考方案3】:

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

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

【讨论】:

【参考方案4】:

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

    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
    

    sudo docker save google_star/_version_1.10 &gt; my_docker-backup.tgz

    使用 (sudo docker load &lt; my_docker-backup.tgz) 恢复它

    在您的新 docker 机器中使用 sudo docker images 检查您的图像

【讨论】:

我认为保存/加载是关于图像,但问题是关于一个正在运行的容器 我有保存/加载数据库图像,但是当我加载它时,没有任何表格。

以上是关于备份一个正在运行的 Docker 容器?的主要内容,如果未能解决你的问题,请参考以下文章

Docke及Docker Compose于微服务的实践

sh 从正在运行的Docker mysql容器备份和恢复mysql数据库

sh 从正在运行的Docker mysql容器备份和恢复mysql数据库

sh 从正在运行的Docker mysql容器备份和恢复mysql数据库

sh 从正在运行的Docker mysql容器备份和恢复mysql数据库

dock helloworld