irpas技术客

解决服务器空间满/var/lib/docker/overlay2占用很大,千万慎用 docker system prune -a清理 mongodb等数据库容器

irpas 5452

项目场景:

服务器空间满,想清理一下。发现是docker太大,/var/lib/docker/overlay2占用很大49G,网站也访问不了,mongodb前一天也停了。用这个清理docker system prune -a,结果把数据库的镜像及容器全删了。mysql等正常的容器及镜像都没影响,那些停了的没用的全删了。

千万慎用这个来清理 docker system prune -a,一定要先备份。
问题描述:

清理docker空间?docker system prune -a

清了7G左右,还误把mongodb等容器及镜像删除,数据也没备份。怎么找回并恢复数据?

还有好几个nodejs容器及镜像被删,这个好办有备份。

原因分析:

没想到空间满,会导致很多容器停止服务。

没想到清理时,会删一些有用的东西。

涉及删除,都有谨慎。一定要先备份,能恢复。

千万慎用这个来清理 docker system prune -a,一定要先备份。


恢复解决方案:

docker mongodb的数据和配置在宿主机上默认有挂载,所以数据没丢。找到并复制数据到新容器里重启就行。具体如下:

新建一个mongodb镜像及容器 docker pull mongo docker run -itd --name mongo -p 27017:27017 mongo docker inspect mongo

可以看到挂到宿主机上的两个目录

配置目录/data/configdb是空的

数据目录/data/db 数据存在这里, 对应挂到宿主机目录为

/var/lib/docker/volumes/4d77ddb447a42bf1242fb3acb7686a6e1f50f44a5c420d1a3a3370f0e0fc7c69/_data

进入目录,看到目录数据结构。因为是默认是匿名挂载,路径是一串字符,容器及镜像被删不好知道哪一个是要找的mongodb数据,找出特征,然后目录搜,搜到导入数据来试。

我觉得应该都带有mongod.lock这个文件

搜到了4个

?可以看日期或目录大小(du -h --max-depth=1)大致判断是哪一个,也可以每个都导入然后用mongo客户端看。我是直接cp,重启容器,再mongodb客户端看。

#我是先在FTP里把新的的容器/var/lib/docker/volumes/481a5cd20939019e21d54d11479eeb5cf2c3d475fd6d030fe31c5b5d76ba7750/_data/下的文件先删了,再复制。 cp -rf /var/lib/docker/volumes/d703574b4a27ef7b32f5d0810aaa60e9ec19f7fb2f01a1dc7d711eecc1b5e096/_data/* /var/lib/docker/volumes/481a5cd20939019e21d54d11479eeb5cf2c3d475fd6d030fe31c5b5d76ba7750/_data/ #重启容器 docker restart mongo #进入容器测试一下,看是否正常启动,显示welcome等 docker exec -it mongo mongo admin #以下非必要操作 #进入mongodb容器后mongodb看数据库 show dbs #mongodb创建用户 db.createUser({ user:'root',pwd:'root',roles:[ { role:'userAdminAnyDatabase', db: 'admin'},"readWriteAnyDatabase"]});

进入 mongodb客户端,已经恢复成功。

把所有与mongdb相关的应用重启,看到有数据插入,界面能显示,系统恢复OK。

docker restart test_kjmon_1 docker restart kjapi docker restart kjweb docker restart test_kjapp_1 docker restart test_kjtcpserver_1

?千万慎用这个来清理 docker system prune -a,一定要先备份。

?

全部指令

#------------------docker mongodb恢复 docker pull mongo:latest docker stop mongo docker rm mongo docker run -itd --name mongo -p 27017:27017 mongo docker exec -it mongo mongo admin cd /var/lib/docker find -name mongod.lock #找到 原数据位置 /var/lib/docker/volumes/4d77ddb447a42bf1242fb3acb7686a6e1f50f44a5c420d1a3a3370f0e0fc7c69/_data #运行mongo docker run -itd --name mongo -p 27017:27017 mongo:latest #查看信息 docker inspect mongo #得到 新数据位置 /var/lib/docker/volumes/536c49ef1edc205778adb688460d6aaac2f9a768075ba83b621306f1e1ae96d4/_data #先清空再复制 cp -rf /var/lib/docker/volumes/4d77ddb447a42bf1242fb3acb7686a6e1f50f44a5c420d1a3a3370f0e0fc7c69/_data/* /var/lib/docker/volumes/536c49ef1edc205778adb688460d6aaac2f9a768075ba83b621306f1e1ae96d4/_data/ #重启mongo docker restart mongo #检查正常后,重启应用 docker restart test_kjmon_1 docker restart kjapi docker restart kjweb docker restart test_kjapp_1 docker restart test_kjtcpserver_1

?

?

docker服务器空间满解决方案:??

57G?? ??? ?/ 根目录 36G ?? ?/var/lib/docker/overlay2 8.8G?? ?/var/lib/docker/containers 容器 2.2G?? ?/var/lib/docker/volumes 使用卷?数据持久化挂载

看上去是/var/lib/docker/overlay2占用很大,你还没法直接删减这里的文件。这就要知道这个文件夹是干什么用的?

?

?


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #APP #通信每隔 #5s #中接收数据代码Override #PUBLIC