容器输出管道至其他进程时Docker磁盘占用增长的原因及解决方法
Docker容器输出占用磁盘的解决办法
问题根源
Docker默认采用json-file日志驱动,会将容器的标准输出(stdout)和标准错误(stderr)写入宿主机本地的日志文件(路径通常为/var/lib/docker/containers/<容器ID>/<容器ID>-json.log)。哪怕你把容器输出通过管道重定向到cat,容器内部的输出依然会被日志驱动捕获并持续写入磁盘,这就是磁盘被持续占用的原因。
可行解决方案
1. 完全关闭容器日志记录
启动容器时指定--log-driver none,彻底禁用日志写入:
docker run --rm --log-driver none alpine sh -c 'while true; do echo "asdasdasdasd"; done' | cat
这样容器的输出只会通过管道传递给cat,不会在宿主机磁盘留下任何日志文件。
2. 限制日志文件的大小和数量
如果需要保留部分日志,可通过日志驱动参数设置自动轮转,避免磁盘被占满:
docker run --rm \ --log-driver json-file \ --log-opt max-size=10m \ --log-opt max-file=3 \ alpine sh -c 'while true; do echo "asdasdasdasd"; done' | cat
max-size=10m:单个日志文件最大限制为10MBmax-file=3:最多保留3个日志文件,超过上限时自动删除最旧的文件
3. 容器内直接丢弃输出(无需管道时)
如果不需要把容器输出传递给宿主机的cat,可以在容器内部将输出重定向到/dev/null:
docker run --rm alpine sh -c 'while true; do echo "asdasdasdasd"; done > /dev/null'
内容的提问来源于stack exchange,提问作者elskrrrrt
相关产品推荐
相关产品推荐

