记录一个docker容器日志输出导致磁盘占用100%的问题与解决方案

问题的发现

早上工作登录服务页面时报了个internal server error,然后登录服务器重启服务,控制台输出no space left on device,说设备没有空间了。


使用命令df -h 查看,果然看到/目录下空间占用率100%


使用 du -ahx .|sort -rh|head -5 ,输出前5个最大的文件和目录

root@ubuntu:/# du -ahx .|sort -rh|head -5
1.1T /var/lib/docker/containers/a3b5be6ccb6c0d122672aa08b6e5f19b8ced59c878ecabe09097078d4b6fcf03/a3b5be6ccb6c0d122672aa08b6e5f19b8ced59c878ecabe09097078d4b6fcf03-json.log
13M /var/lib/docker/containers/a3b5be6ccb6c0d122672aa08b6e5f19b8ced59c878ecabe09097078d4b6fcf03
13M /var/lib/docker/containers
192K /var/lib/docker/containers/77e1b761688244b4f1f537b569adaa45b89aa6c676d4a025eabb4ef4a30fada9
160K /var/lib/docker/containers/77e1b761688244b4f1f537b569adaa45b89aa6c676d4a025eabb4ef4a30fada9/77e1b761688244b4f1f537b569adaa45b89aa6c676d4a025eabb4ef4a30fada9-json.log


可以看到下面这条输出,某个容器的日志文件占了1.1T把磁盘空间写满了

1.1T	/var/lib/docker/containers/a3b5be6ccb6c0d122672aa08b6e5f19b8ced59c878ecabe09097078d4b6fcf03/a3b5be6ccb6c0d122672aa08b6e5f19b8ced59c878ecabe09097078d4b6fcf03-json.log


解决

将 a3b5be6 这个容器删除,并重新创建即可。经过这次错误得留意了,日志输出做一些限制。


容器日志配置

配置容器的日志输出行为有两种方式,配置单个容器的日志、全局配置。


1、配置单个容器的日志

修改docker-compose.yml


services:

  your_service:

    # 其他配置

    logging:

      driver: "json-file"

      options:

        max-size: "10m"  

        max-file: "3"


2、全局配置

可以修改 Docker daemon 的配置文件 /etc/docker/daemon.json。


{

  "log-driver": "json-file",

  "log-opts": {

    "max-size": "10m",

    "max-file": "3"

  }

}


--log-opt max-size: 设置单个日志文件的最大大小。当日志文件达到这个值时,Docker 会自动轮换日志文件。

--log-opt max-file: 设置日志文件的最大数量。当达到这个值时,Docker 会删除最旧的日志文件。


潘永胜 2024年4月8日
分析这篇文章

存档
登录 留下评论
UML类图关系