服务器硬盘容量达到顶峰,没有空闲空间。利用df -h的时候查看到/data/docker/overlay2占用最大。以为这里面都是docker的缓存文件,删除也无妨,所以直接通过 rm -rf 命令删除。(没有做任何备份)删完之后整个人就傻了,所有的容器运行全部失败。
此时!不要慌,不要着急做其他操作。按照下面步骤,可以救回来!
首先讲清一个概念,这个overlay2不是缓存文件,他是镜像和容器之间的中间层,破坏了这个文件等同于破坏了镜像和容器,除非你能找回,否则只能重来,具体的理论知识大家可以在看overlay2的详细介绍。
第一步:
用docker ps -a查看容器,找到坏掉的容器,我们以mysql为例。
用docker inspect 容器ID 查看容器的元数据。
我们需要看的最关键的几点:1. 版本号 2. 数据卷共享 3. 端口映射。
版本号:
数据卷共享:
端口号:
可以看出我的mysql镜像是8.0.25,数据卷共享是在我服务器上/data/mysql/datadir/ 这个路径下,只要这个路径的文件不被破坏,那就丝毫没有问题。
接下来很简单了,删除你的容器,删除你的镜像!反正你也无法在run起来了。
然后用docker run 重新来!
docker run -name mysql -p 6464:3306 -v /data/mysql/conf/my.cnf:/etc/mysql/my.cnf -v /data/mysql/datadir:/var/lib/mysql mysql:8.0.25
这时候他就会重新下载镜像,跟你之前的配置完全一样,端口号也不变。利用docker ps查看运行是否成功,再去看看mysql是否连接正常就好了!
其他的镜像也同样是这么个道理!血的教训,在不清楚文件是什么的时候千万不要rm,rm之前一定要做备份!!!