DOCKER设置日志轮转
之前Ubuntu环境下docker方式部署的gitlab服务器,zabbix突然报告空间使用已超80%。查看后发现一个73G的大日志文件,位于/var/lib/docker/containers/ef5e0c55b57968eaf52ef9c9f5dca4142a1b6c2878dcb6eceee098568bb0d0c3/目录下。
该路径是Docker容器日志的标准路径,这个文件应该是GitLab的JSON日志文件。
使用`truncate`命令清空日志文件,暂时解决了空间告警问题,但日志还在不断生成。
为了避免以后再次出现日志过大的问题,打算配置Docker的日志轮转。
修改Docker的配置文件/etc/docker/daemon.json,添加日志驱动配置:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "3"
}
}
这里设置每个日志文件最大100MB,最多保留3个文件(即总共最多300MB)。然后重启Docker服务:
#sudo systemctl restart docker
但是命令执行报错
Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xeu docker.service" for details.
执行journalctl -xeu docker.service,查看具体报错信息,发现
Aug 12 05:43:30 gitserver dockerd[1811208]: unable to configure the Docker daemon with file /etc/docker/daemon.json: invalid character '"' after object key:value pair
检查daemon.json文件,新加的配置写在原有镜像配置之后
"registry-mirrors": [
]
在镜像列表后缺了个逗号" ,"
修改后保存,
重启Docker,服务重启成功。
#sudo systemctl daemon-reload
#sudo systemctl restart docker
第二天观察日志文件,发现已超过400M。
查看容器日志驱动配置,返回结果为空
# docker inspect gitlab --format '{{.HostConfig.LogConfig}}'
{json-file map[ ]}
表明DOCKER的配置在容器中未生效。
打算重建容器看下效果
#docker compose down
#docker compose up -d
再次查看容器日志驱动配置,返回结果正常了。
# docker inspect gitlab --format '{{.HostConfig.LogConfig}}'
{json-file map[max-file:3 max-size:100m]}
在随后的观察中,日志文件达到100M就会生成第二个文件,第三个文件也达到100M后,会覆盖第一个文件,日志轮转配置成功。
总结:修改docker配置文件后,不能仅重启docker服务,还要重建容器才能使配置生效。