snap remove docker 之后如何恢复docker容器

snap remove docker 之后如何恢复docker容器

我用 删除了 docker sudo snap remove docker。我其实并不想删除它,只是想检查我是否用 安装了它snap(事后看来应该用snap list),相信它会[Y/n]像 一样提示我apt。但它只是继续删除了 docker。很好。很快就重新安装了它。

但是,我的容器在哪里?!所有图像和容器(docker ps -a)都不见了!卸载它花了很长时间,所以我想知道是否有一些备份,或者文件是否仍然保留,容器是否可以恢复?不关心图像,只关心容器。谢谢。

已检查/var/snap/docker/common/var-lib-docker/containers,但原始容器已不在那里。

答案1

事实证明,耗时较长的操作确实是备份,或者用他们的术语来说,是快照。从文档

快照是使用 snap save 命令手动生成的,在删除快照时会自动生成(需要 snapd 2.39+)。快照可用于备份快照状态、将快照恢复到之前的状态以及将全新的 snapd 安装恢复到之前保存的状态。

我检查了我的snapd版本:

# snap --version
snap    2.52.1
snapd   2.52.1
series  16
ubuntu  21.04
kernel  5.11.0-40-generic

然后查看有哪些可用的快照:

# snap saved
Set  Snap    Age    Version  Rev   Size    Notes
1    docker  2h58m  20.10.8  1125  1.39GB  auto

检查快照是否正常:

# snap check-snapshot 1
Snapshot #1 verified successfully.

最后,恢复自动快照:

# snap restore 1
Restored snapshot #1.

此时,docker ps -a仍然显示我在最新安装后创建的容器,而不是我想要恢复的容器。如果我没有创建新容器,它也许会正常工作。但我知道至少容器文件已恢复,因为我可以在 下找到它们/var/snap/docker/common/var-lib-docker/overlay2/。这总比没有好。小心snap remove

恢复原始容器

让我回顾一下我是如何陷入这种状态的:

  • 运行后sudo snap remove docker,重要的容器被清除
  • 再次运行sudo snap install docker安装docker
  • 运行docker-compose up后出现了两个新容器
  • 运行snap restore 1以恢复自动快照

此时,我能够找到恢复的容器文件,但docker ps -a仍然没有显示实际的容器。总之,这是我为恢复完整容器所做的事情:

  • 在第二次安装后删除了所有可见的容器和图像,因为我不需要它们
  • 再次删除dockersudo snap remove docker并发现自动快照再次发生:“将快照“docker”的数据保存在自动快照集#2中”
  • 再次恢复第一个快照:snap restore 1

现在,如果我这样做,docker ps -a我可以再次看到所有容器都处于停止状态!但是有一个问题,其中一个容器无法启动,并显示以下消息:Error: response from daemon: OCI runtime create failed: container with id exists:...

为了解决这个问题,我发现最简单的方法是docker commit <container-id>使用生成的图像将其作为新容器启动。在看到它没问题之后,我摆脱了损坏的那个。一切恢复正常!

顺便说一句,使用卷来保存容器中的数据是一种很好的做法。图像也可以已保存到档案馆。

相关内容