Docker磁盤滿了的高效又安全清理方案小結(jié)
最近在帶著大家做項目的時候碰到了一個印象很深的問題,和大家總結(jié)分享一下:明明代碼邏輯沒問題,部署時卻頻頻報錯,排查半天發(fā)現(xiàn)是服務器磁盤被占滿了?
今天把解決思路整理出來,希望能幫你快速釋放磁盤空間
問題根源:Docker 為什么會占滿磁盤
Docker 運行時會產(chǎn)生大量“臨時資源”,比如:
- 測試后停止運行的容器
- 構(gòu)建失敗或過時的鏡像
- 未被使用的自定義網(wǎng)絡
- 構(gòu)建鏡像時產(chǎn)生的緩存文件
這些資源默認不會自動刪除,積累久了就會導致磁盤告警。好在 Docker 提供了專門的清理命令,一招就能解決大部分問題。
核心解決方案:docker system prune命令
一、命令簡介
docker system prune 是 Docker 提供的系統(tǒng)級資源清理命令,用于自動刪除以下未被使用的資源 :
- 已停止的容器(Stopped containers)
- 懸空鏡像(Dangling images)
- 未被任何容器使用的自定義網(wǎng)絡(Unused networks)
- 構(gòu)建緩存(Build cache)
默認不會刪除 :
- 正在運行的容器
- 有標簽且未被引用的鏡像(如
nginx:latest) - 數(shù)據(jù)卷(Volumes)
- 默認網(wǎng)絡(
bridge、host、none)
二、基本語法
docker system prune [OPTIONS]
常用選項
| 選項 | 說明 |
|---|---|
| -a, --all | 同時刪除所有未被使用的鏡像 (不僅是懸空鏡像) |
| -f, --force | 跳過確認提示,直接執(zhí)行清理(靜默模式) |
| --filter | 按條件過濾要刪除的資源(如 until=24h) |
| --volumes | 額外刪除未使用的本地卷(?? 高危操作?。?/td> |
三、詳細行為說明
默認行為(不加-a)
執(zhí)行 docker system prune 會刪除:
| 資源類型 | 刪除條件 |
|---|---|
| 容器 | 狀態(tài)為 exited、created 等非運行狀態(tài) |
| 鏡像 | 僅 dangling=true(即 <none>:<none> 且無容器引用) |
| 網(wǎng)絡 | 用戶創(chuàng)建的自定義網(wǎng)絡,且未被任何容器使用 |
| 構(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:徹底清理(包括未使用的有標簽鏡像)
docker system prune -a -f
示例 4:清理 + 刪除未使用卷(高危!)
docker system prune --volumes -f
五、安全性與風險控制
安全保障
- 不影響正在運行的容器和服務
- 不刪除默認網(wǎng)絡和關鍵系統(tǒng)資源
- 卷(Volumes)默認保留,防止數(shù)據(jù)丟失
風險提示
| 操作 | 風險 |
|---|---|
| prune -a | 可能誤刪后續(xù)部署所需的鏡像 |
| prune --volumes | 永久刪除數(shù)據(jù)庫等持久化數(shù)據(jù) |
| 在生產(chǎn)環(huán)境自動執(zhí)行 | 可能導致服務恢復困難(缺少鏡像) |
安全建議
先預覽再執(zhí)行:不加 -f 運行,確認刪除列表
生產(chǎn)環(huán)境避免 -a 和 --volumes
重要鏡像提前備份:
docker save myapp:v1 -o myapp_v1.tar
定期監(jiān)控磁盤使用:
docker system df
六、查看清理效果
清理前后對比磁盤占用:
# 清理前 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é):讓磁盤清理成為習慣
磁盤管理是運維的基礎工作。定期執(zhí)行 docker system prune -f 能有效避免磁盤滿的問題,配合 docker system df 監(jiān)控,可讓部署更順暢。
到此這篇關于Docker磁盤滿了的高效又安全清理方案小結(jié)的文章就介紹到這了,更多相關Docker磁盤清理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Docker 數(shù)據(jù)卷,數(shù)據(jù)卷容器詳細介紹
這篇文章主要介紹了 Docker 數(shù)據(jù)卷,數(shù)據(jù)卷容器詳細介紹的相關資料,這里對Docker 數(shù)據(jù)卷,數(shù)據(jù)卷容器的感念及相關操作進行了介紹,需要的朋友可以參考下2016-11-11
.NET?6?從0到1使用Docker部署至Linux環(huán)境超詳細教程
這篇文章主要介紹了.NET?6?從0到1使用Docker部署至Linux環(huán)境,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-05-05
docker-compose啟動mysql雙機熱備互為主從的方法實現(xiàn)
本文主要介紹了docker-compose啟動mysql雙機熱備互為主從的方法實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-07-07
Docker啟動MySQL報錯:/etc/mysql/conf.d目錄缺失的解決方案
這篇文章主要介紹了MySQL容器啟動失敗的原因及解決方法,MySQL在啟動時會讀取/etc/mysql/conf.d/目錄下的配置文件,若該目錄不存在或未正確掛載,會導致初始化失敗,解決方法包括通過掛載目錄、使用Dockerfile創(chuàng)建目錄或臨時繞過檢查等,需要的朋友可以參考下2026-03-03
docker?gitea?drone實現(xiàn)超輕量級CI?CD實戰(zhàn)詳解
這篇文章主要為大家介紹了docker?gitea?drone實現(xiàn)超輕量級CI?CD實戰(zhàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-10-10
docker時區(qū)問題和遷移數(shù)據(jù)問題
這篇文章主要介紹了docker時區(qū)問題和遷移數(shù)據(jù)問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-12-12
解決Docker之mysql容器數(shù)據(jù)庫更改不生效的問題
這篇文章主要介紹了解決Docker之mysql容器數(shù)據(jù)庫更改不生效的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11

