如何查找Docker中使用磁盤空間最多的容器?

如何查找Docker中使用磁盤空間最多的容器?

背景描述

測試環境某臺Docker主機觸發磁盤空間報警,經過排查與分析發現是某個docker容器內的應用日誌過大導致的,下面是具體的排查步驟。

環境描述

日誌文件: php容器 stderr日誌
PHP容器: 使用 php:5.6-fpm 鏡像
Docker主機: 
    系統: Ubuntu Server 16.04
    Storage Driver: overlay2
容器平臺: Rancher 1.6

操作步驟

  1. 磁盤空間(文件系統)狀態
df -Th /
Filesystem     Type  Size  Used Avail Use% Mounted on
/dev/vda1      ext4   99G   70G   25G  75% /
  1. 統計目錄佔用磁盤空間
du -h --max-depth=1 /

發現最大目錄依次如下列表:

/var/
/var/lib/
/var/lib/docker/
/var/lib/docker/overlay2/

最終佔用最大的目錄是:
ef24649...省略...f7e6933/

這個目錄是某個容器臨時存儲層目錄,其生命週期取決於這個容器的生命週期,目錄的名稱也是臨時存儲層的ID,我們可以根據這個ID找到目標容器。

  1. 找到這個容器
for c in `docker ps -qa`; \
do \
  docker inspect $c \
  | grep -i 'ef24649...省略...f7e6933' && \
  echo $c; \
done

8b251ce7f7ae

這裏使用Shell循環依次對比當前主機的容器是否包含這個臨時存儲層ID。

  1. 根據容器ID找到容器名字
docker inspect -f '{{ .Name }}'  8b251ce7f7ae

/r-css-css-server-1-d3579e44
  1. 釋放磁盤空間
    最後我們要釋放被佔用的磁盤空間,可以根據找到容器ID/名稱在rancher平臺上升級這個應用(舊的容器將被刪除替換)。

如何查找Docker中使用磁盤空間最多的容器?

  1. 驗證磁盤空間
df -Th /
Filesystem     Type  Size  Used Avail Use% Mounted on
/dev/vda1      ext4   99G   17G   78G  18% /

小結

最後來總結下文章中的知識點

  • 容器存儲層的生存週期和容器一樣,容器消亡時容器存儲層也隨之消亡。
  • 任何保存於容器存儲層的信息都會隨容器刪除而消失。
  • 容器數量較多時可以使用Shell循環,批量對比容器配置信息來找到目標容器。

參考文章

doker&k8s Qun [703906133]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章