Docker磁盤滿了的高效又安全清理方案小結(jié)
最近在帶著大家做項(xiàng)目的時(shí)候碰到了一個(gè)印象很深的問題,和大家總結(jié)分享一下:明明代碼邏輯沒問題,部署時(shí)卻頻頻報(bào)錯(cuò),排查半天發(fā)現(xiàn)是服務(wù)器磁盤被占滿了?
今天把解決思路整理出來,希望能幫你快速釋放磁盤空間
問題根源:Docker 為什么會(huì)占滿磁盤
Docker 運(yùn)行時(shí)會(huì)產(chǎn)生大量“臨時(shí)資源”,比如:
- 測(cè)試后停止運(yùn)行的容器
- 構(gòu)建失敗或過時(shí)的鏡像
- 未被使用的自定義網(wǎng)絡(luò)
- 構(gòu)建鏡像時(shí)產(chǎn)生的緩存文件
這些資源默認(rèn)不會(huì)自動(dòng)刪除,積累久了就會(huì)導(dǎo)致磁盤告警。好在 Docker 提供了專門的清理命令,一招就能解決大部分問題。
核心解決方案:docker system prune命令
一、命令簡(jiǎn)介
docker system prune 是 Docker 提供的系統(tǒng)級(jí)資源清理命令,用于自動(dòng)刪除以下未被使用的資源 :
- 已停止的容器(Stopped containers)
- 懸空鏡像(Dangling images)
- 未被任何容器使用的自定義網(wǎng)絡(luò)(Unused networks)
- 構(gòu)建緩存(Build cache)
默認(rèn)不會(huì)刪除 :
- 正在運(yùn)行的容器
- 有標(biāo)簽且未被引用的鏡像(如
nginx:latest) - 數(shù)據(jù)卷(Volumes)
- 默認(rèn)網(wǎng)絡(luò)(
bridge、host、none)
二、基本語(yǔ)法
docker system prune [OPTIONS]
常用選項(xiàng)
| 選項(xiàng) | 說明 |
|---|---|
| -a, --all | 同時(shí)刪除所有未被使用的鏡像 (不僅是懸空鏡像) |
| -f, --force | 跳過確認(rèn)提示,直接執(zhí)行清理(靜默模式) |
| --filter | 按條件過濾要?jiǎng)h除的資源(如 until=24h) |
| --volumes | 額外刪除未使用的本地卷(?? 高危操作!) |
三、詳細(xì)行為說明
默認(rèn)行為(不加-a)
執(zhí)行 docker system prune 會(huì)刪除:
| 資源類型 | 刪除條件 |
|---|---|
| 容器 | 狀態(tài)為 exited、created 等非運(yùn)行狀態(tài) |
| 鏡像 | 僅 dangling=true(即 <none>:<none> 且無(wú)容器引用) |
| 網(wǎng)絡(luò) | 用戶創(chuàng)建的自定義網(wǎng)絡(luò),且未被任何容器使用 |
| 構(gòu)建緩存 | 所有 docker build 產(chǎn)生的中間層緩存 |
四、使用示例
示例 1:交互式清理(推薦首次使用)
$ docker system prune 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
示例 2:靜默清理(推薦使用)
docker system prune -f
示例 3:徹底清理(包括未使用的有標(biāo)簽鏡像)
docker system prune -a -f
示例 4:清理 + 刪除未使用卷(高危!)
docker system prune --volumes -f
五、安全性與風(fēng)險(xiǎn)控制
安全保障
- 不影響正在運(yùn)行的容器和服務(wù)
- 不刪除默認(rèn)網(wǎng)絡(luò)和關(guān)鍵系統(tǒng)資源
- 卷(Volumes)默認(rèn)保留,防止數(shù)據(jù)丟失
風(fēng)險(xiǎn)提示
| 操作 | 風(fēng)險(xiǎn) |
|---|---|
| prune -a | 可能誤刪后續(xù)部署所需的鏡像 |
| prune --volumes | 永久刪除數(shù)據(jù)庫(kù)等持久化數(shù)據(jù) |
| 在生產(chǎn)環(huán)境自動(dòng)執(zhí)行 | 可能導(dǎo)致服務(wù)恢復(fù)困難(缺少鏡像) |
安全建議
先預(yù)覽再執(zhí)行:不加 -f 運(yùn)行,確認(rèn)刪除列表
生產(chǎn)環(huán)境避免 -a 和 --volumes
重要鏡像提前備份:
docker save myapp:v1 -o myapp_v1.tar
定期監(jiān)控磁盤使用:
docker system df
六、查看清理效果
清理前后對(duì)比磁盤占用:
# 清理前 docker system df # 執(zhí)行清理 docker system prune -f # 清理后 docker system df
輸出示例:
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 10 3 2.1GB 1.4GB (66%)
Containers 5 3 120MB 80MB (66%)
Local Volumes 4 2 500MB 300MB (60%)
Build Cache - - 800MB 800MB
總結(jié):讓磁盤清理成為習(xí)慣
磁盤管理是運(yùn)維的基礎(chǔ)工作。定期執(zhí)行 docker system prune -f 能有效避免磁盤滿的問題,配合 docker system df 監(jiān)控,可讓部署更順暢。
到此這篇關(guān)于Docker磁盤滿了的高效又安全清理方案小結(jié)的文章就介紹到這了,更多相關(guān)Docker磁盤清理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Centos Stream9安裝Docker報(bào)錯(cuò)download.docker.com:443的原因分析與解決
這篇文章主要為大家詳細(xì)介紹了Centos Stream9在安裝Docker時(shí),報(bào)錯(cuò)download.docker.com:443的原因分析與解決方法,有需要的小伙伴可以參考下2025-10-10
使用Docker構(gòu)建多環(huán)境應(yīng)用的完整指南
Docker已經(jīng)成為了現(xiàn)代應(yīng)用程序開發(fā)和部署的核心工具之一,本文將介紹如何使用Docker構(gòu)建多環(huán)境應(yīng)用,包括開發(fā)、測(cè)試和生產(chǎn)環(huán)境,希望對(duì)大家有所幫助2025-08-08
使用 kind 和 Docker 啟動(dòng)本地的 Kubernetes環(huán)境
這篇文章主要介紹了使用 kind 和 Docker 啟動(dòng)本地的 Kubernetes環(huán)境,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05
docker的基本使用及使如何用Docker 運(yùn)行D435i
這篇文章主要介紹了docker的基本使用及使如何用Docker 運(yùn)行D435i,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2023-11-11
docker-compose搭建etcd集群的實(shí)現(xiàn)(三節(jié)點(diǎn))
本文主要介紹了docker-compose搭建etcd集群的實(shí)現(xiàn)(三節(jié)點(diǎn)),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07

