动态

详情 返回 返回

Docker磁盤滿了?這樣清理高效又安全 - 动态 详情

大家好,我是地鼠哥,最近在帶着大家做項目的時候碰到了一個印象很深的問題,和大家總結分享一下:明明代碼邏輯沒問題,部署時卻頻頻報錯,排查半天發現是服務器磁盤被佔滿了

今天把解決思路整理出來,不僅能幫你快速釋放磁盤空間,也想順便安利下我們的項目課程(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)
  • 默認網絡(bridgehostnone

🛠️ 二、基本語法

docker system prune [OPTIONS]

常用選項

選項 説明
-a, --all 同時刪除所有未被使用的鏡像 (不僅是懸空鏡像)
-f, --force 跳過確認提示,直接執行清理(靜默模式)
--filter 按條件過濾要刪除的資源(如 until=24h
--volumes 額外刪除未使用的本地卷(⚠️ 高危操作!)

🔍 三、詳細行為説明

默認行為(不加 -a

執行 docker system prune 會刪除:

資源類型 刪除條件
容器 狀態為 exitedcreated 等非運行狀態
鏡像 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 永久刪除數據庫等持久化數據
在生產環境自動執行 可能導致服務恢復困難(缺少鏡像)

✅ 安全建議

  1. 先預覽再執行:不加 -f 運行,確認刪除列表
  2. 生產環境避免 -a--volumes
  3. 重要鏡像提前備份
docker save myapp:v1 -o myapp_v1.tar
  1. 定期監控磁盤使用
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) 不僅包含完整的項目架構設計,還有更多像這樣的實戰運維技巧,幫你少踩坑、高效開發!

user avatar gvison 头像 mangrandechangjinglu 头像 rtedevcomm 头像 xiaoxiansheng_5e75673e1ae30 头像 alibabataoxijishu 头像 xiongshihubao 头像 tizuqiudexiangpica 头像 shimiandekaohongshu_ewvskz 头像 innsane 头像 daqidexihongshi 头像 dadebinglin 头像 chenzhuodeyagao 头像
点赞 18 用户, 点赞了这篇动态!
点赞

Add a new 评论

Some HTML is okay.