docker运行一段时间之后,磁盘会占满

作者
2025-10-09阅读 4

1、现象

服务是微服务,docker部署的。然后就碰到了一个问题:发版上线一段时间了,磁盘就告警,占用率直接100%,导致服务挂掉。

此时重启实例(docker restart)是没有用的,需要重新创建实例才行

2、问题的调查过程

(1)首先是用df -h查看磁盘的占用清况

# 查看整体磁盘使用情况
df -h

null

初步得到的结论是:docker的overlay2的磁盘太大

(2)查看具体的占用清况

# 查看 Docker 存储目录大小
du -sh /var/lib/docker/*

# 查看 overlay2 各层大小
du -sh /var/lib/docker/overlay2/* | sort -hr | head -n 20

这样的话可以查到具体的哪个镜像的磁盘占用比较的厉害

(3)、解决方式1 - 直接清理

# 查看前20大日志文件
find /var/lib/docker/containers -name "*.log" -exec du -sh {} \; | sort -hr | head -n 20

然后清空日志文件

# 安全地清空单个日志文件
truncate -s 0 /var/lib/docker/containers/<container-id>/<container-id>-json.log

此处理了可以结合定时任务来处理

(4)、解决方式2 - 设置日志大小限制

4.1、全局方式

编辑 /etc/docker/daemon.json

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}

然后重启 Docker:

systemctl daemon-reload
systemctl restart docker

4.2、单容器设置

docker run -d \
  --log-driver json-file \
  --log-opt max-size=10m \
  --log-opt max-file=3 \
  --name myapp myimage

3、查看docker的日志位置

运行以下命令查看日志驱动和日志文件路径:

docker inspect -f '{{.HostConfig.LogConfig}}' <container-name>
docker inspect -f '{{.LogPath}}' <container-name>

4、原因

使用docker部署的jar服务。由于日志级别太低(DEBUG级别),所以导致日志打印量太大



全部评论