事發場景:
原本正常的服務停止運行了,查看時MQTT服務鏈接失敗,查看對應的容器服務發現是EMQX鏡像停止運行了,重啟也是也報錯無法正常運行,報錯如下圖:
報錯日志中連續出現兩個"no space left on device"的報錯,這是典型磁盤寫滿的癥狀。從報錯路徑看,EMQX試圖在/opt/emqx/data/configs目錄下寫配置文件失敗。
-
原因:EMQX 無法生成配置文件,因為磁盤已滿。
查看磁盤空間,已被占滿。
?發現是Docker的日志文件占滿的,
1. 清理 Docker 無用數據
# 強制清理所有無用資源(包含未使用的鏡像、容器、網絡、構建緩存等)
docker system prune -a -f --volumes# 單獨清理懸空鏡像(二次確認)
docker rmi $(docker images -f "dangling=true" -q)
2. 清理大日志文件
# 查找所有容器日志文件(顯示大于100MB的)
find /mnt/sdc/docker_data/containers/ -name "*.log" -size +100M -ls# 清空大日志文件(不刪除文件)
sudo truncate -s 0 /mnt/sdc/docker_data/containers/*/*-json.log
執行sudo truncate -s 0 /mnt/sdc/docker_data/containers/*/*-json.log命令之后,空間就釋放了,后面就恢復正常了,
執行?sudo truncate -s 0 /mnt/sdc/docker_data/containers/*/*-json.log
?不會直接影響正在運行的容器進程,但需注意以下關鍵點:
影響維度 | 說明 |
---|---|
容器運行狀態 | ? 不會停止或重啟容器(僅清空日志文件,不干擾容器主進程) |
已輸出的日志 | ? 會永久刪除當前日志內容(但新日志仍會正常寫入) |
日志依賴服務 | ?? 若容器進程正通過?tail -f ?或日志采集工具(如Fluentd)讀取該文件,會導致讀取中斷 |