本文来自:https://linuxiac.com/reducing-docker-logs-file-size/,文章告诉了我们该如何查找、减少和管理docker日志文件的大小,由于原文是英文,所以我对原文进行翻译,并记录在本文中。
一.检查Docker日志大小
Docker日志通常保存在主机上的以下位置(如果您没有显式更改Docker的默认数据目录):
container-id为你docker容器的id
/var/lib/docker/containers/<container-id>/<container-id>-json.log

每个Docker容器在“/var/lib/ Docker /containers/”下都有自己的目录。在每个容器的目录中,您会发现一个以“-json.log”结尾的文件,其中包含该特定容器的日志。
默认情况下,这些文件以JSON格式结构化,并捕获容器的标准输出(stdout)和标准错误(stderr)流。
查看所有Docker容器日志的大小,可以使用 find
命令:
find /var/lib/docker/containers/ -name "*json.log" | xargs du -h | sort -hr

二.通过Docker的ID找到Docker的容器名
假设如上图所示,占用最大空间的docker ID为a5130c4544ea2d2d0075cf9fe92069714c4f1433d01c0235d8a0a2352c202744

我们使用如下的命令,即可查询到对应的docker容器名。
docker inspect --format='{{.Name}}' <container_id>
例如:docker inspect --format='{{.Name}}' a5130c4544ea2d2d0075cf9fe92069714c4f1433d01c0235d8a0a2352c202744

我们已经确认,在我们的例子中,负责日志文件的Docker容器被名字为“napcat”。
然后我们通过命令docker ps,就可以找到对应的容器。

要再次检查这是否是产生日志文件的正确容器,可以使用 docker inspect <container_name>
命令来验证这一点,以获得有关它的更多详细信息,并确认它是日志文件的源。在我们的例子中,它看起来像这样:
docker inspect napcat |grep "LogPath"

三.清理docker容器日志
可以使用 truncate
命令清除单个日志文件的所有内容。只需提供要清除的日志文件的完整路径作为参数。例如:
truncate -s 0 /var/lib/docker/containers/a5130c4544ea2d2d0075cf9fe92069714c4f1433d01c0235d8a0a2352c202744/a5130c4544ea2d2d0075cf9fe92069714c4f1433d01c0235d8a0a2352c202744-json.log
清理前:

清理后:

或者也可以选择更加激进的方法,直接一键清除所有docker日志文件。但是,在运行下面的命令之前,请确保您了解自己在做什么。
truncate -s 0 /var/lib/docker/containers/*/*-json.log
四.设置docker日志大小限制
上面描述的方法为管理大型Docker日志文件和释放磁盘空间提供了一个临时修复。然而,它需要经常使用某些命令,这可能不太方便。
一个更好、更持久的解决方案是限制Docker日志文件的最大大小。一旦达到这个大小,Docker守护进程将自动旋转这些日志文件,并按照命名约定(如“-json.log”)对它们进行归档。1”、“< container_id > -json.log。等等,取决于下面显示的选项。
这保证了日志文件不会不受控制地增长。下面我们讨论如何做到这一点。
要对Docker守护进程运行的所有容器全局应用日志轮换设置,你可以编辑Docker守护进程配置文件,通常位于“/etc/ docker /daemon.json”。如果该文件不存在,可以通过执行类似的命令创建它:
sudo nano /etc/docker/daemon.json
然后将如下内容粘贴到文件中,保存并退出:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
我解释一下它的作用。简而言之,它将日志驱动程序设置为“json-file”,将单个Docker日志文件的最大允许大小设置为10兆字节,并允许最多归档3个版本的文件。
接下来,要应用这些更改,只需重启Docker服务:
sudo systemctl restart docker
重要的是要记住,这些更改只会影响新创建的Docker容器,而不是已经运行的容器。要将更改应用于现有更改,必须先删除更改,然后重新创建更改。你可以这样做。
如果您使用标准Docker命令启动容器,请使用以下命令停止并删除容器:
docker rm -f <container_id_or_name>
这是一个方便的命令,可以立即停止和删除容器。但是,使用“-f”可能有风险,因为它不允许彻底关闭在容器中运行的应用程序。那就像之前那样再运行一遍容器,执行如下命令:
docker compose down
它停止并删除文件中定义的所有资源。然后,用下边的命令重新运行部署:
docker compose up -d
如果您再次查看容器的详细信息,您应该会看到您之前在Docker守护进程中输入的数据。Json”文件已应用到容器。
docker inspect <container_name>

Comments NOTHING