我用sudo snap remove docker
. 我实际上并不想删除它,只是检查我是否安装了它snap
(应该snap list
在事后使用),相信它会提示我[Y/n]
这样apt
做。但它只是继续并删除了docker。美好的。重新安装它很快。
但是,我的容器在哪里?!所有的图像和容器(docker ps -a)
都不见了!卸载它花了很长时间,所以我想知道是否有一些备份或文件仍然保留并且容器可以恢复?不关心图像,只关心容器。谢谢。
检查/var/snap/docker/common/var-lib-docker/containers
过,但原来的容器不在那里。
事实证明,需要很长时间的操作确实是备份,或者用他们的术语来说,是快照。从文档中:
我检查了我的
snapd
版本:然后查看可用的快照:
检查快照是否正常:
最后,恢复自动快照:
此时
docker ps -a
仍然向我展示了我在最新安装后创建的容器,而不是我想要恢复的容器。也许如果我没有创建新容器,它就可以工作。但是我知道至少容器文件已经恢复了,因为我可以在/var/snap/docker/common/var-lib-docker/overlay2/
. 这总比没有好。小心snap remove
!恢复原始容器
让我回顾一下我是如何进入这种状态的:
sudo snap remove docker
了重要的容器sudo snap install docker
安装dockerdocker-compose up
了两个新容器snap restore 1
恢复自动快照此时我能够找到恢复的容器文件,但
docker ps -a
仍然没有显示实际的容器。总之,这就是我为取回完整容器所做的工作:sudo snap remove docker
并注意到自动快照再次发生:"Save data of snap "docker" in automatic snapshot set #2"。snap restore 1
现在,如果我这样做,
docker ps -a
我可以再次看到我所有的容器,处于停止状态!但是有一个问题,其中一个无法启动,并显示以下消息:Error: response from daemon: OCI runtime create failed: container with id exists:...
.为了解决这个问题,我发现最简单的方法是
docker commit <container-id>
使用生成的图像将其作为新容器启动。在我看到它很好之后,我把那个坏掉的扔掉了。一切恢复正常!顺便说一句,使用卷将数据持久保存在容器中被认为是一种很好的做法。图像也可以保存到档案中。