天天看點

docker的/var/lib/docker/overlay檔案夾突然占滿了硬碟

場景描述

事情是這樣的,前兩天客戶的伺服器突然斷電了,導緻用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
           

其實docker挺簡單的,把官方文檔的入門教程看完,就能用了。

再自己打個包試試,基本上就OK了。後面 遇到問題再深入,都可以。

當然,如果想買本書,那麼我推薦這一本

深入淺出Docker 可以點選直達京東

基本上就是官方文檔的中文譯本,是以流程上和官網文檔也是一緻的,适合英文不好的朋友看