場景描述
事情是這樣的,前兩天客戶的服務器突然斷電了,導致用docker部署的服務也掛了。昨天去現場,重啟了docker,同時准備更新一下服務。結果發現有一台節點硬盤滿了…
還是覺得有些奇怪的,畢竟docker的安裝盤有800多個G的空間,之前也只用了100左右,覺得有點奇怪,就開始了排錯。
排錯過程
本身機器只有我們一家在用,所以不存在被占用的情況。於是使用下面命令查看是不是硬盤真被占滿了:
df -h
結果真的是占滿了😂
再用下面命令查看哪個文件夾太大:
du -sh *
發現是 /var/lib/docker/overlay 占滿了
網上查一下這個目錄的作用,說是 overlay/overlay2表示Docker的存儲驅動,可以參考一下這篇文章:https://blog.csdn.net/styshoo/article/details/60715942
也就是說容器/鏡像等都會存在這個目錄下,當量大的時候就會占滿硬盤。
也可以參考官網(https://docs.docker.com/storage/storagedriver/overlayfs-driver/)
繼續在網上搜資料,說可以看看是不是死掉容器過多的原因,使用 docker ps -a看了下,果然是。於是清理了一下無用的容器,硬盤就恢復正常了……
簡單辦法
多看了一下資料,發現可以使用 docker system prune來自動清理空間,參考下面:
- 該指令默認會清除所有如下資源:
- 已停止的容器(container)
- 未被任何容器所使用的卷(volume)
- 未被任何容器所關聯的網絡(network)
- 所有懸空鏡像(image)。
- 該指令默認只會清除懸空鏡像,未被使用的鏡像不會被刪除。
- 添加
-a 或 --all
參數后,可以一並清除所有未使用的鏡像和懸空鏡像。 - 可以添加
-f 或 --force
參數用以忽略相關告警確認信息。 - 指令結尾處會顯示總計清理釋放的空間大小。
(https://yq.aliyun.com/articles/272173 )
另外,使用下面命令可以查看docker所占的硬盤大小,如:
➜ 20190417 docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 104 5 77.78GB 71.39GB (91%)
Containers 8 0 139MB 139MB (100%)
Local Volumes 30 1 3.276kB 3.183kB (97%)
Build Cache 0B 0B