服务器磁盘空间被Docker容器日志占满处理方法
事发场景:
原本正常的服务停止运行了,查看时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)读取该文件,会导致读取中断 |