彻底解决Docker日志过大问题

过去的,未来的
2020-01-19 / 0 评论 / 0 点赞 / 880 阅读 / 0 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2020-01-19,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

这个问题我已经被坑过了。。。。。
docker日志一般存储在/var/lib/docker/containers/<container_id>下,文件名为<container_id>-json.log,docker中的日志全部由这个文件负责记录,如果业务量大的话,这个文件大小增长会非常快,若在其他地方记录业务日志的话,那么这个docker日志可以控制它的体积。

方法一:

nginx: 
  image: nginx:1.12.1 
  restart: always 
  logging: 
    driver: "json-file"
    options: 
      max-size: "5g"

docker-compose.yml官方介绍里是这么说的,限制日志大小为5GB。不过当我实验的时候发现并不认logging这个参数,后来发现是yml文件中version的版本写的过低,这里推荐写3即可,如:

version: '3'
services:
  redis:
    image: redis:5.0
    restart: always
    container_name: IP20-redis-6378
    environment:
    - TZ=Asia/Shanghai
    ports:
    - 6378:6378
    volumes:
    - ./redis.conf:/etc/redis/redis.conf
    command: redis-server /etc/redis/redis.conf
    logging:
      driver: "json-file"
      options:
	max-size: "5g"

补充:若想关闭docker中的日志,使之不生成log文件,则配置如下:

version: '3'
services:
  redis:
    image: redis:5.0
    restart: always
    container_name: IP20-redis-6378
    environment:
    - TZ=Asia/Shanghai
    ports:
    - 6378:6378
    volumes:
    - ./redis.conf:/etc/redis/redis.conf
    command: redis-server /etc/redis/redis.conf
    logging:
      driver: "none"

或者在docker run命令中加上-log-driver=none参数即可

方法二:

在/etc/docker/daemon.json文件中添加关于日志的参数(无此文件的可以新建):

{
	"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"],
	"log-driver": "json-file",
	"log-opts": {
		"max-size": "1m",
		"max-file": "1"
	}
}

因为我在其他地方记录了业务日志,所以docker中的日志就尽量设置小一点,我设置了最大文件大小为1MB,文件数量为1个。
设置之后重启docker服务:

systemctl daemon-reload
systemctl restart docker

注意:设置的日志大小,只对新建的容器有效

看下实际效果:

[root@r-d-47 60084fbb27418505fc91c70b5ac866d96b6a3d8683dfd18ae161e9ee293e3451]# ls | xargs du -sh
960K	60084fbb27418505fc91c70b5ac866d96b6a3d8683dfd18ae161e9ee293e3451-json.log
0	checkpoints
8.0K	config.v2.json
4.0K	hostconfig.json
4.0K	hostname
4.0K	hosts
0	mounts
4.0K	resolv.conf
4.0K	resolv.conf.hash

来源:https://leif.fun/articles/2019/12/12/1576138669053.html

0

评论区