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

Docker libcontainerd模块出现PROTOCOL_ERROR导致日志文件暴涨耗尽磁盘空间求助

Docker libcontainerd模块出现PROTOCOL_ERROR导致日志文件暴涨耗尽磁盘空间求助

兄弟,我之前也踩过这个坑!先给你分步骤来,先紧急救回磁盘空间,再彻底解决日志疯涨的根源问题:

一、紧急释放磁盘空间(先让应用恢复正常)

  • 别直接删除那些超大的旧日志文件,容易导致日志服务出问题,用空内容覆盖它们就行:
    cat /dev/null > /var/log/syslog.1
    cat /dev/null > /var/log/daemon.log.1
    
    这俩命令执行完,瞬间就能释放40多G的空间,你的Node.js应用应该就能正常跑了。
  • 如果syslog还在疯狂刷日志,临时重启一下rsyslog服务稳住:
    systemctl restart rsyslog
    

二、解决dockerd的PROTOCOL_ERROR根源

这个错误是Docker和containerd之间的RPC通信出问题了,试试这几个方法:

  • 先单独重启containerd服务,大部分情况这个操作就能修复通信异常:
    systemctl restart containerd
    
  • 如果重启containerd没用,就把整个Docker服务重启(重启前先确认你的容器会自动重启!):
    先检查容器的重启策略:
    docker ps -q | xargs docker inspect --format '{{.Name}} 重启策略: {{.HostConfig.RestartPolicy.Name}}'
    
    要是显示always或者unless-stopped,就放心执行:
    systemctl restart docker
    
  • 检查Docker和containerd的版本兼容性,Debian默认源里的版本可能比较老,容易出现不匹配的情况。你可以用这俩命令看版本:
    docker version
    containerd --version
    
    如果版本差距较大,建议更新到Docker官方提供的稳定版套件,比Debian源的版本靠谱多了。
  • 顺带清理一下Docker的冗余资源,缓存堆积有时候也会间接引发通信问题:
    docker system prune -af
    

三、长期预防:配置日志自动管理

这次是吃了日志没限制的亏,给你两个配置方案,防止以后再爆磁盘:

  1. 配置logrotate自动切割系统日志:
    给rsyslog加个配置,让它自动切割/var/log里的日志文件,比如限制单个日志最大100M,保留5个备份,避免文件无限膨胀。
  2. 限制Docker容器日志大小:
    编辑Docker daemon的配置文件/etc/docker/daemon.json(如果没有就新建),添加日志驱动的限制:
    {
      "log-driver": "json-file",
      "log-opts": {
        "max-size": "10m",
        "max-file": "5"
      }
    }
    
    保存后重启Docker生效:
    systemctl restart docker
    
    这样每个容器的日志最多保留5个10M的文件,再也不会出现单个日志几十G的情况了。

备注:内容来源于stack exchange,提问作者Manda Ravalison

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 07:08:18