

**在linux上，容器日志一般存放在/var/lib/docker/containers/container_id/下面， 以json.log结尾的文件**

### 查看各个日志文件大小

**业务日志很大，查看各个日志文件大小的脚本内容如下**

```shell
#!/bin/sh
 
echo "======== docker containers logs file size ========"
 
logs=`find /var/lib/docker/containers/ -name *-json.log` 
 
for log in $logs
do
    ls -lh $log
done
```





### 清理正在运行的容器日志（治标）

如果docker容器正在运行，那么使用rm -rf方式删除日志后，通过df -h会发现磁盘空间并没有释放。原因是在Linux或者Unix系统中，通过rm -rf或者文件管理器删除文件，将会从文件系统的目录结构上解除链接（unlink）。如果文件是被打开的（有一个进程正在使用），那么进程将仍然可以读取该文件，磁盘空间也一直被占用。正确姿势是cat /dev/null > *-json.log，当然你也可以通过rm -rf删除后重启docker。接下来，提供一个日志清理脚本内容如下：

```shell
#!/bin/sh
echo "======== start clean docker containers logs ========"

logs=`find /var/lib/docker/containers/ -name *-json.log`

for log in $logs
do
    echo "clean logs : $log"
    cat /dev/null > $log
done
echo "======== end clean docker containers logs ========"
```

```shell
# 编写定时任务，定时清理：

~]# crontab -e	
* * */15 * * /bin/sh /opt/docker_clean_logs.sh &>/dev/null

 
~]# crontab -l	
* * */15 * * /bin/sh /opt/docker_clean_logs.sh &>/dev/null
```



### 设置Docker容器日志大小（治本）

**设置一个容器服务的日志大小上限**

**上一种方法，日志文件迟早又会涨回来。要从根本上解决问题，需要限制容器服务的日志大小上限。这个通过配置容器docker-compose的max-size选项来实现**

```shell
logging:
      driver: "json-file"
      options:
        max-size: "500m"      # 日志文件大小
        max-file: "6"		# 日志的数量
# 重启容器之后，其日志文件的大小就被限制在2GB，再也不用担心了
```

**容器范围内**

```shell
#docker run时添加--log-opt max-size=500m --log-opt max-file=3参数,如创建并运行

docker run -name xxx -p 80:80 --log-opt max-size=500m  --log-opt max-file=3 xxx:v1
```





### 全局设置(治根)

**Docker 日志分为两类：**

**Docker 引擎日志(也就是 dockerd 运行时的日志)，**

**容器的日志，容器内的服务产生的日志。**

**常用查看日志命令——docker logs**

**Docker 日志 驱动：默认的日志驱动—JSON**

**所有容器默认的日志驱动 json-file。**

**json-file 日志驱动 记录从容器的 STOUT/STDERR 的输出 ，用 JSON 的格式写到文件中，日志中不仅包含着 输出日志，还有时间戳和 输出格式**

```shell
选项	描述	示例值
max-size	切割之前日志的最大大小。可取值单位为(k,m,g)， 默认为-1（表示无限制）。	--log-opt max-size=10m
max-file	可以存在的最大日志文件数。如果切割日志会创建超过阈值的文件数，则会删除最旧的文件。仅在max-size设置时有效。正整数。默认为1。	--log-opt max-file=3
配置文件 /etc/docker/daemon.json 添加log-dirver和log-opts参数:

#	max-size=500m，意味着一个容器日志大小上限是500M，
#	max-file=3，意味着一个容器有三个日志，分别是id+.json、id+1.json、id+2.json。
	
{
   "log-driver":"json-file",
   "log-opts": {"max-size":"500m", "max-file":"3"}
}
CentOS7的操作:修改配置文件后重启docker守护进程

	systemctl daemon-reload
	systemctl restart docker
# 注意：设置的日志大小，只对新建的容器有效。
```





### 查出占用磁盘较大的文件

**Docker 的日志文件存在 /var/lib/docker/containers 目录中，通过下面的命令可以将日志文件夹根据升序的方式罗列出来**

```shell
sudo du -d1 -h /var/lib/docker/containers | sort -h
```

