大家好,我是地鼠哥,最近在帶着大家做項目的時候碰到了一個印象很深的問題,和大家總結分享一下:明明代碼邏輯沒問題,部署時卻頻頻報錯,排查半天發現是服務器磁盤被佔滿了?
今天把解決思路整理出來,不僅能幫你快速釋放磁盤空間,也想順便安利下我們的項目課程(https://mp.weixin.qq.com/s/ACzEHtvGh2YsU_4fxo83fQ),裏面還包含了更多部署運維的實戰技巧哦~
📌 問題根源:Docker 為什麼會佔滿磁盤?
Docker 運行時會產生大量“臨時資源”,比如:
- 測試後停止運行的容器
- 構建失敗或過時的鏡像
- 未被使用的自定義網絡
- 構建鏡像時產生的緩存文件
這些資源默認不會自動刪除,積累久了就會導致磁盤告警。好在 Docker 提供了專門的清理命令,一招就能解決大部分問題。
🛠️ 核心解決方案:docker system prune 命令
📌 一、命令簡介
docker system prune 是 Docker 提供的系統級資源清理命令,用於自動刪除以下未被使用的資源 :
- 已停止的容器(Stopped containers)
- 懸空鏡像(Dangling images)
- 未被任何容器使用的自定義網絡(Unused networks)
- 構建緩存(Build cache)
⚠️ 默認不會刪除 :
- 正在運行的容器
- 有標籤且未被引用的鏡像(如
nginx:latest)- 數據卷(Volumes)
- 默認網絡(
bridge、host、none)
🛠️ 二、基本語法
docker system prune [OPTIONS]
常用選項
| 選項 | 説明 |
|---|---|
-a, --all |
同時刪除所有未被使用的鏡像 (不僅是懸空鏡像) |
-f, --force |
跳過確認提示,直接執行清理(靜默模式) |
--filter |
按條件過濾要刪除的資源(如 until=24h) |
--volumes |
額外刪除未使用的本地卷(⚠️ 高危操作!) |
🔍 三、詳細行為説明
默認行為(不加 -a)
執行 docker system prune 會刪除:
| 資源類型 | 刪除條件 |
|---|---|
| 容器 | 狀態為 exited、created 等非運行狀態 |
| 鏡像 | 僅 dangling=true(即 <none>:<none> 且無容器引用) |
| 網絡 | 用户創建的自定義網絡,且未被任何容器使用 |
| 構建緩存 | 所有 docker build 產生的中間層緩存 |
🧪 四、使用示例
示例 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
🔒 五、安全性與風險控制
✅ 安全保障
- 不影響正在運行的容器和服務
- 不刪除默認網絡和關鍵系統資源
- 卷(Volumes)默認保留,防止數據丟失
⚠️ 風險提示
| 操作 | 風險 |
|---|---|
prune -a |
可能誤刪後續部署所需的鏡像 |
prune --volumes |
永久刪除數據庫等持久化數據 |
| 在生產環境自動執行 | 可能導致服務恢復困難(缺少鏡像) |
✅ 安全建議
- 先預覽再執行:不加
-f運行,確認刪除列表 - 生產環境避免
-a和--volumes - 重要鏡像提前備份:
docker save myapp:v1 -o myapp_v1.tar
- 定期監控磁盤使用:
docker system df
📊 六、查看清理效果
清理前後對比磁盤佔用:
# 清理前
docker system df
# 執行清理
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
📝 總結:讓磁盤清理成為習慣
磁盤管理是運維的基礎工作。定期執行 docker system prune -f 能有效避免磁盤滿的問題,配合 docker system df 監控,可讓部署更順暢。
如果你在項目開發中還遇到過其他部署難題,歡迎關注並私信我交流問題,另外我們的微服務電商項目課程(https://mp.weixin.qq.com/s/ACzEHtvGh2YsU_4fxo83fQ) 不僅包含完整的項目架構設計,還有更多像這樣的實戰運維技巧,幫你少踩坑、高效開發!