[Docker] Docker 的 data file 佔據了非常大的磁碟空間?
今天 CentOS 7 上跳出了一個訊息,說我的根目錄 / 快要滿了…
感覺怪怪的,用 df -h 看一下,果真 50GB 的空間幾乎被用光光:
root@localhost / # df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 50G 50G 20K 100% /
用 du 掃一下根目錄下的第一層子目錄,找找看哪個比較大~
我這邊用比較笨的方式,用 grep 找出佔據空間超過 1GB 以上的,
發現有 /usr 和 /var,而 /var 佔了 22G 特別可疑:
root@localhost / # du --exclude=/proc --exclude=/mnt --exclude=/home -h -s /* | egrep G
7.3G /usr
22G /var
繼續用 du 往 /var 的下一層子目錄追進去看看,是 /var/lib 吃掉了空間:
root@localhost / # du -hs /var/* | egrep G
1.7G /var/cache
26G /var/lib
用 du 的方式持續往下追,最後發現有一個檔案就佔掉了 20GB,
是 /var/lib/docker/devicemapper/devicemapper/data:
root@localhost / # du -hs /var/lib/docker/devicemapper/devicemapper/* | egrep G
20G /var/lib/docker/devicemapper/devicemapper/data
看來是 docker 的檔案…
用 docker info 看一下,這是 docker data file:
root@localhost / # docker info
Containers: 114
Running: 3
Paused: 0
Stopped: 111
Images: 310
Storage Driver: devicemapper
Data Space Used: 26.16 GB
Data Space Total: 107.4 GB
Data Space Available: 20.48 kB
Data loop file: /var/lib/docker/devicemapper/devicemapper/data
從 docker info 看到 container 有 114 個,
其中沒有在執行的有 111 個,數量有點多…
用 docker ps -a 看一下,有一堆 container 都已經是好幾個月前執行後,就沒再用了:
root@localhost / # docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 96ef976501f8 8674f6250ec5 "/bin/bash" 4 months ago Exited (137) 4 months ago angry_hopper 5e91a871518b 8674f6250ec5 "/bin/bash" 4 months ago Exited (137) 4 months ago serene_mahavira 672d989adcf8 e684f555b341 "/bin/bash" 4 months ago Exited (137) 4 months ago reverent_easley ......
猜想是我使用 docker container 的用法,常常是 docker run,沒有加上 –rm 參數,
所以 container 結束後會留在那裡…
先用 docker rm 把所有的 container 都砍掉:
docker rm $(docker ps -a -q)
現在沒有 container 了,而 data file 使用的空間從 26.16G 降到 20.59G:
root@localhost / # docker info
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 310
Storage Driver: devicemapper
Data Space Used: 20.59 GB
Data Space Total: 107.4 GB
Data Space Available: 5.03 GB
從 docker info 的結果那邊,我們還注意到了 docker image 的數量也很多…
用 docker images 加上 –filter “dangling=true” 找到無人參考到的映像檔
(這些無主的映像檔應該是因為我有使用 docker build 而跑出來的):
root@localhost / # docker images --filter "dangling=true"
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> 44d705aa5402 4 months ago 2.34 GB
<none> <none> e684f555b341 8 months ago 2.431 GB
<none> <none> 355dae28f418 9 months ago 2.315 GB
<none> <none> a44563c362a3 9 months ago 2.033 GB
<none> <none> 15591861f645 9 months ago 2.188 GB
<none> <none> 5ab24f01828d 9 months ago 2.143 GB
<none> <none> 6e0faa7a6d28 9 months ago 2.171 GB
<none> <none> d39df5ff880b 9 months ago 2.171 GB
<none> <none> 397df1bae2b0 9 months ago 2.068 GB
<none> <none> 497c9171bbbb 9 months ago 2.348 GB
<none> <none> a5f658e17968 11 months ago 1.956 GB
<none> <none> 4865ce4d77b5 12 months ago 2.231 GB
<none> <none> 670abde3dcd1 12 months ago 2.086 GB
<none> <none> e9ad3e0457e5 12 months ago 1.658 GB
<none> <none> 014fd2329f9d 12 months ago 1.516 GB
<none> <none> 694cac6105db 12 months ago 2.266 GB
<none> <none> d7db0bd39415 12 months ago 1.168 GB
<none> <none> 33219c490108 13 months ago 1.032 GB
用 docker rmi 將這些無主的映像檔刪除:
docker rmi $(docker images --filter "dangling=true" -q)
再跑一次 docker info 看看,image 數量從 310 降到了 219,
而 data file 的空間也從 20.59G 降到 12.09G:
root@localhost / # docker info
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 219
Storage Driver: devicemapper
Data Space Used: 12.09 GB
Data Space Total: 107.4 GB
Data Space Available: 13.07 GB
看一下目前 df 的結果,根目錄下總共還回來了約 39G 的空間:
root@localhost / # df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 50G 39G 12G 77% /
沒想到 container 空間吃的這麼兇…
以後還是得記得 docker run 要加上 –rm 參數比較好啊~
參考資料:
What are Docker <none>:<none> images?