Docker磁盤滿了的高效又安全清理方案小結(jié)
最近在帶著大家做項(xiàng)目的時(shí)候碰到了一個(gè)印象很深的問題,和大家總結(jié)分享一下:明明代碼邏輯沒問題,部署時(shí)卻頻頻報(bào)錯(cuò),排查半天發(fā)現(xiàn)是服務(wù)器磁盤被占滿了?
今天把解決思路整理出來(lái),希望能幫你快速釋放磁盤空間
問題根源:Docker 為什么會(huì)占滿磁盤
Docker 運(yùn)行時(shí)會(huì)產(chǎn)生大量“臨時(shí)資源”,比如:
- 測(cè)試后停止運(yùn)行的容器
- 構(gòu)建失敗或過(guò)時(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) | 說(shuō)明 |
|---|---|
| -a, --all | 同時(shí)刪除所有未被使用的鏡像 (不僅是懸空鏡像) |
| -f, --force | 跳過(guò)確認(rèn)提示,直接執(zhí)行清理(靜默模式) |
| --filter | 按條件過(guò)濾要?jiǎng)h除的資源(如 until=24h) |
| --volumes | 額外刪除未使用的本地卷(?? 高危操作!) |
三、詳細(xì)行為說(shuō)明
默認(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:清理 + 刪除未使用卷(高危?。?/h4>
docker system prune --volumes -f
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)文章
Docker容器因配置錯(cuò)誤無(wú)法啟動(dòng)的恢復(fù)方法詳解
在日常使用?Docker?的過(guò)程中,可能會(huì)遇到在容器內(nèi)修改了某個(gè)配置文件并保存,隨后重啟容器時(shí)發(fā)現(xiàn)容器無(wú)法正常啟動(dòng)的情況,下面我們來(lái)看看如何解決吧2026-01-01
Docker 數(shù)據(jù)卷,數(shù)據(jù)卷容器詳細(xì)介紹
這篇文章主要介紹了 Docker 數(shù)據(jù)卷,數(shù)據(jù)卷容器詳細(xì)介紹的相關(guān)資料,這里對(duì)Docker 數(shù)據(jù)卷,數(shù)據(jù)卷容器的感念及相關(guān)操作進(jìn)行了介紹,需要的朋友可以參考下2016-11-11
Docker安裝Redis并介紹可視化客戶端進(jìn)行操作
這篇文章主要介紹了Docker安裝Redis并介紹可視化客戶端進(jìn)行操作方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04
.NET?6?從0到1使用Docker部署至Linux環(huán)境超詳細(xì)教程
這篇文章主要介紹了.NET?6?從0到1使用Docker部署至Linux環(huán)境,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05
docker-compose啟動(dòng)mysql雙機(jī)熱備互為主從的方法實(shí)現(xiàn)
本文主要介紹了docker-compose啟動(dòng)mysql雙機(jī)熱備互為主從的方法實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
Docker啟動(dòng)MySQL報(bào)錯(cuò):/etc/mysql/conf.d目錄缺失的解決方案
這篇文章主要介紹了MySQL容器啟動(dòng)失敗的原因及解決方法,MySQL在啟動(dòng)時(shí)會(huì)讀取/etc/mysql/conf.d/目錄下的配置文件,若該目錄不存在或未正確掛載,會(huì)導(dǎo)致初始化失敗,解決方法包括通過(guò)掛載目錄、使用Dockerfile創(chuàng)建目錄或臨時(shí)繞過(guò)檢查等,需要的朋友可以參考下2026-03-03
docker?gitea?drone實(shí)現(xiàn)超輕量級(jí)CI?CD實(shí)戰(zhàn)詳解
這篇文章主要為大家介紹了docker?gitea?drone實(shí)現(xiàn)超輕量級(jí)CI?CD實(shí)戰(zhàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10
docker時(shí)區(qū)問題和遷移數(shù)據(jù)問題
這篇文章主要介紹了docker時(shí)區(qū)問題和遷移數(shù)據(jù)問題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
解決Docker之mysql容器數(shù)據(jù)庫(kù)更改不生效的問題
這篇文章主要介紹了解決Docker之mysql容器數(shù)據(jù)庫(kù)更改不生效的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-11-11

