Docker系統(tǒng)空間占用過(guò)大的清理方法詳解
在日常使用 Docker 的過(guò)程中,我們經(jīng)常會(huì)發(fā)現(xiàn)服務(wù)器磁盤空間莫名其妙地被占滿。特別是 /var/lib/docker/overlay2 目錄動(dòng)輒幾十個(gè) G,讓人懷疑是不是有人用 Docker 挖礦了……
其實(shí),大部分情況下問(wèn)題并不復(fù)雜:很多 Docker 鏡像層、構(gòu)建緩存、停止的容器,仍然占用大量空間卻沒(méi)有被清理。解決方案也非常簡(jiǎn)單,一條命令就能完成清理!
問(wèn)題現(xiàn)象
使用 df -h 查看磁盤使用情況:
df -h
發(fā)現(xiàn)根目錄 / 使用率接近 100%:
/dev/vda1 99% /var/lib/docker/overlay2 占用非常大
進(jìn)一步查看是 Docker 的 overlay2 目錄占用了大量空間:
du -h --max-depth=1 /var/lib/docker/overlay2 | sort -hr | head
結(jié)果顯示幾十 GB 的無(wú)效目錄,甚至根本不是正在使用容器的層:
20G /var/lib/docker/overlay2/abc123...
18G /var/lib/docker/overlay2/9dd...
...
但是這些目錄又不敢直接 rm -rf 刪除,擔(dān)心刪錯(cuò)了導(dǎo)致容器啟動(dòng)失敗。
判斷哪些目錄不能刪
我們可以用 docker inspect 判斷某個(gè) overlay2 層是否屬于正在運(yùn)行的容器:
docker inspect <CONTAINER_ID> --format '{{.GraphDriver.Data.UpperDir}}'
如果匹配到 /var/lib/docker/overlay2/<id>/diff 說(shuō)明是正在使用,不能動(dòng)。
但是手動(dòng)檢查太費(fèi)時(shí)間!有沒(méi)有一條命令能自動(dòng)清理?
解決方案:一條命令,自動(dòng)清理
docker system prune
默認(rèn)清理內(nèi)容:
| 清理內(nèi)容 | 說(shuō)明 |
|---|---|
| 停止的容器 | Exited 狀態(tài) |
| 無(wú)用的網(wǎng)絡(luò) | bridge 等臨時(shí)網(wǎng)絡(luò) |
| dangling images | <none> 類型的鏡像層 |
| build cache | Docker 構(gòu)建緩存 |
執(zhí)行時(shí)會(huì)提示確認(rèn):
WARNING! This will remove:
- all stopped containers
- all networks not used by at least one container
- all dangling images
- all build cache
Are you sure you want to continue? [y/N] y
效果立竿見(jiàn)影:清理后 overlay2 目錄明顯縮小,磁盤恢復(fù)正常!
如果想清理更多空間
docker system prune -a
這會(huì)額外清理 所有未使用的鏡像(包括沒(méi)有運(yùn)行容器引用的)
更徹底的版本(連 volumes 一起清)
docker system prune -a --volumes
注意:執(zhí)行前一定要確認(rèn) volume 是否還在使用!
清理前后對(duì)比
| 狀態(tài) | 磁盤使用率 |
|---|---|
| 清理前 | 98% |
| 執(zhí)行 docker system prune 后 | 降到 65% |
| 再執(zhí)行 -a --volumes 后 | 僅 40% |
建議定期維護(hù)
可以寫成定時(shí)任務(wù),每周清理一次:
# /etc/crontab 0 3 * * SUN root docker system prune -a -f
總結(jié)
| 問(wèn)題 | 解決方法 |
|---|---|
| overlay2 占空間大 | docker system prune |
| 停止的容器太多 | docker ps -a → docker rm |
| 鏡像太多 | docker image prune -a |
| 卷占空間 | docker volume prune |
實(shí)戰(zhàn)經(jīng)驗(yàn)
千萬(wàn)不要手動(dòng) rm -rf /var/lib/docker/overlay2/...
最安全的清理方式永遠(yuǎn)是 Docker 官方命令!
這樣不僅避免誤刪容器層,也讓 Docker 內(nèi)部的元數(shù)據(jù)保持一致,系統(tǒng)更穩(wěn)定。
結(jié)語(yǔ)
如果你也遇到系統(tǒng)空間被 Docker 吃光的問(wèn)題,不妨試試這一條命令:
docker system prune
到此這篇關(guān)于Docker系統(tǒng)空間占用過(guò)大的清理方法詳解的文章就介紹到這了,更多相關(guān)Docker空間占用過(guò)大清理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
docker啟動(dòng)mysql5.7服務(wù)詳細(xì)說(shuō)明
這篇文章主要給大家介紹了關(guān)于docker啟動(dòng)mysql5.7服務(wù)的相關(guān)資料,文中通過(guò)代碼示例介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考價(jià)值,需要的朋友可以參考下2023-09-09
Docker部署PDF查看器PdfDing的實(shí)現(xiàn)
PdfDing是一種輕量級(jí)的應(yīng)用程序,可以通過(guò)Docker輕松地在服務(wù)器上設(shè)置,本文主要介紹了Docker部署PDF查看器PdfDing的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2025-06-06
Docker多階段鏡像構(gòu)建的實(shí)現(xiàn)
本篇文章主要介紹了Docker多階段鏡像構(gòu)建的實(shí)現(xiàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-04-04
Jenkins整合Docker自動(dòng)化部署的實(shí)現(xiàn)
本文主要介紹了Jenkins整合Docker自動(dòng)化部署的實(shí)現(xiàn),通過(guò)結(jié)合Jenkins的持續(xù)集成和Docker的容器化技術(shù),可以高效地構(gòu)建、測(cè)試和部署應(yīng)用程序,感興趣的可以了解一下2023-11-11
docker啟動(dòng)報(bào)錯(cuò)問(wèn)題OCI runtime create failed: c
這篇文章主要介紹了docker啟動(dòng)報(bào)錯(cuò)問(wèn)題OCI runtime create failed: container_linux.go:380: starting container process,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08

