是否可以备份正在运行的 Docker 容器?该export
命令适合这样做吗?
4 回答
由一位朋友在评论中发表
嗨 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
在此处添加以便可以从摘要中找到该问题已得到解答。谢谢所罗门!
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"
使用docker commit
是我备份容器(已启动或已停止)的首选方式。创建一个您可以命名的图像:
docker commit - p <container_id> <backup-name>
你也可以使用保存和加载..这是示例
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
使用 ( )恢复它sudo docker images
在您的新 docker 机器中检查您的图像