如何恢复已经删除的 docker 容器的数据

前言

使用 docker 自带的 volume 机制进行数据的持久化,docker会在宿主机的特定位置(/var/lib/docker/volumes)维护各个volumes,

面对容器删除的问题,有如下几个结论:

  • 容器启动(docker run)时,即使没有显示的指定-v -mount参数,容器的相关数据已经被作为volumes持久化存储了,比如在/var/lib/docker/volumes下面,所以数据是在的。
  • 但如果 docker run时,显示指定使用了tmpfs的mount类型,删除容器时才会被清理。
  • 或者如果docker rm时指显示定了-v参数,也会连带删除容器依赖的volumes数据。

所以,只要没有手残强制使用了临时存储或者删除时强制指定了删除数据,数据还是在的。

如何恢复

    1. 找到删除容器对应的volumes
    1. 基于一样的镜像启动新的容器
    1. 将之前的volumes迁移/挂载到新的容器上

怎么找到删除容器的volumes

通过ls或者du等命令来观察目录的创建时间和大小,来推断删除容器的volumes是哪(几)个。比如mysql的容器,那么大小一般比较大

注: 找到volume后先进行备份

启动新的容器

基于之前的镜像,直接启动容器,通过inspect命令查看新容器的volume名称。

docker inspect 容器ID

如果对于镜像的使用比较了解了,则可以直接在启动时,将找到的volumes挂载到正确的位置即可略过第3步骤:将之前的volumes迁移/挂载到新的容器上

将之前的volume迁移/挂载到新的容器上

  • 执行docker stop 新容器停止新容器。
  • 使用mv命令,在/var/lib/docker/volumes中将步骤1获取的目录的名称修改为步骤2获取的新容器的目录名称:mv 旧的volume名称 新的volume名称。
  • 执行docker start 新容器再次启动新容器。

参考

不小心删除了docker容器怎么恢复?

posted @ 2024-01-20 20:25  strongmore  阅读(984)  评论(0编辑  收藏  举报