You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker daemon持续写磁盘致Shell命令卡顿问题求助(v19.03)

Docker Daemon 持续写入磁盘导致系统缓慢的原因与解决方法

我之前也碰到过类似的Docker磁盘写入过高导致系统卡顿的问题,结合你提供的进程信息和Docker 19.03版本的情况,大概率是以下几个原因造成的,给你一一分析并给出解决办法:

可能的原因

  • 容器日志无限制输出:Docker默认会将容器的标准输出/错误日志以json-file格式存在本地,且没有大小和数量限制。如果有容器持续输出大量日志(比如调试日志、错误日志),dockerd会不断将这些日志写入磁盘,占用大量IO资源。
  • 未开启自动清理机制:Docker运行过程中会产生大量无用的镜像、容器、卷、网络等资源,19.03版本默认没有开启自动清理,dockerd在后台扫描或维护这些资源时会频繁读写磁盘。
  • Containerd日志或元数据频繁写入:你使用containerd作为runtime,如果containerd配置为debug日志级别,会产生大量日志文件;或者其元数据存储有异常,也会导致持续写入。
  • 后台镜像拉取/更新任务:如果有定时拉取镜像、自动更新容器的脚本或第三方工具(比如watchtower),dockerd会在后台持续操作磁盘。

排查与解决步骤

1. 先定位具体写入的文件

首先用工具确认dockerd到底在写哪些文件,方便针对性解决:

  • 用iotop -oP查看实时IO情况,找到dockerd进程对应的写入文件路径;
  • 或者用lsof -p <dockerd-pid> | grep -E "(REG|DIR)"列出dockerd打开的文件,重点看频繁写入的日志或数据文件。

2. 限制容器日志大小(最常见解决方案)

修改Docker daemon配置文件/etc/docker/daemon.json(如果没有就新建),添加日志轮转规则:

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

这个配置会让每个容器的日志最多保留3个10MB的文件,超过后自动轮转删除旧日志。修改后重启Docker:

systemctl restart docker

3. 开启自动清理无用资源

  • 先手动清理一次所有无用资源:
docker system prune -af
  • 然后设置定时任务自动清理(比如每周日凌晨2点),编辑crontab:
crontab -e

添加一行:

0 2 * * 0 docker system prune -af > /dev/null 2>&1

也可以在daemon.json中配置自动清理(19.03版本部分支持,建议测试):

{
  "events": {
    "gc": {
      "enabled": true,
      "interval": "24h",
      "prune-filters": ["label!=keep"]
    }
  }
}

4. 调整Containerd日志配置

查看containerd的配置文件/etc/containerd/config.toml,找到log_level选项,将其从debug改为info(减少日志输出):

[plugins."io.containerd.grpc.v1.cri"]
  log_level = "info"

修改后重启containerd:

systemctl restart containerd

5. 禁用不必要的后台任务

检查是否有定时拉取镜像的脚本,或者watchtower这类自动更新工具,暂时禁用这些服务,观察磁盘写入是否下降。

6. 检查存储驱动与磁盘状态

  • 查看当前Docker存储驱动:
docker info | grep Storage Driver

如果使用overlay2,确保磁盘没有碎片化,且剩余空间充足(磁盘使用率超过80%会导致写入性能急剧下降)。可以考虑清理磁盘空间,或者对磁盘进行碎片整理。

内容的提问来源于stack exchange,提问作者Wallace

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 21:02:35