备份正在运行的Docker容器?
是否有可能备份正在运行的Docker容器? export
指令是否适合这样做?
由一位朋友发表评论
嗨,斯拉瓦,对不起,你的问题已经结束了。 为了logging,Slava在谈论docker.io,一个Linux容器的运行时。 是的, docker export
是一个合适的方法。 它会生成你的整个容器文件系统状态的tarball,并将其转储到标准输出。 所以
docker export $CONTAINER_ID > $CONTAINER_ID-backup.tar
将产生一个可用的tarball。 你可以重新导入tarball
docker import - slava/$CONTAINER_ID-backup < $CONTAINER_ID-backup.tar
请注意,原始元数据(例如原始图像的ID)将会丢失。 这应该在未来版本的docker中修复。 所罗门Hykes 4月2 '13在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"
你也可以使用保存和加载..这里的示例
-
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
检查您的图像