备份一个正在运行的 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
将产生一个可用的压缩包。您可以使用
重新导入 tarballdocker 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 > my_docker-backup.tgz
使用 (sudo docker load < my_docker-backup.tgz
) 恢复它
在您的新 docker 机器中使用 sudo docker images
检查您的图像
【讨论】:
我认为保存/加载是关于图像,但问题是关于一个正在运行的容器。 我有保存/加载数据库图像,但是当我加载它时,没有任何表格。以上是关于备份一个正在运行的 Docker 容器?的主要内容,如果未能解决你的问题,请参考以下文章
sh 从正在运行的Docker mysql容器备份和恢复mysql数据库
sh 从正在运行的Docker mysql容器备份和恢复mysql数据库
sh 从正在运行的Docker mysql容器备份和恢复mysql数据库