
Docker限制日志大小
Docker是一个流行的容器化平台,可以在容器中运行应用程序。对于Docker的日志,我们通常会希望它们被保存在文件中,以便于分析和排除问题。然而,日志文件很容易变得非常大,这可能会占用大量磁盘空间并影响性能。因此,我们需要配置Docker以限制日志文件的大小。
Docker使用日志驱动程序来记录容器的输出。默认情况下,Docker使用json-file驱动程序来记录日志,以下会从两方面来进行日志大小限制。
json-file驱动程序
限制单个容器
- 确定要限制日志大小的Docker容器的名称或ID。
- 停止该容器并删除其现有的日志文件。可以使用以下命令来执行此操作:
注意:第三个命令将删除该容器的JSON日志文件。如果您希望保留旧日志文件,请将此命令更改为重命名或移动该文件。docker container stop <container_name_or_id> docker container rm <container_name_or_id> rm /var/lib/docker/containers/<container_id>/<container_id>-json.log
- 在启动Docker容器时,使用以下命令设置json-file日志驱动程序,并指定最大日志文件大小和最大文件数量:
其中,<max_size>指定最大文件大小,以字节为单位。可以使用K,M或G等后缀来指定千字节,兆字节或千兆字节。例如,–log-opt max-size=10M将设置最大文件大小为10兆字节。docker run --log-driver=json-file --log-opt max-size=<max_size> --log-opt max-file=<max_file_count> <image_name>
<max_file_count>指定最大文件数量。当达到最大文件数量时,最旧的文件将被删除以腾出空间。例如,–log-opt max-file=5将设置最多存储5个日志文件。
<image_name>指定要启动的Docker镜像的名称。 - 启动容器并检查新的JSON日志文件是否已创建:
注意:新的日志文件将以数字作为后缀进行命名,例如container_id-json.log.1。docker container start <container_name_or_id> ls /var/lib/docker/containers/<container_id>/<container_id>-json.log*
现在,您已经成功地使用json-file驱动程序来限制Docker容器的日志大小。根据您设置的最大文件大小和最大文件数量,Docker将定期删除最旧的日志文件,以便腾出磁盘空间。
全局限制
要在Docker中全局限制日志大小,可以通过编辑Docker daemon配置文件来设置默认的日志驱动程序和日志限制。以下是如何使用json-file驱动程序来全局限制Docker日志大小的步骤:
- 打开Docker daemon配置文件。该文件通常位于/etc/docker/daemon.json。如果该文件不存在,请创建它。
sudo nano /etc/docker/daemon.json
- 将以下内容添加到文件中:
其中,<max_size>指定最大文件大小,以字节为单位。可以使用K,M或G等后缀来指定千字节,兆字节或千兆字节。例如,“max-size”: "10M"将设置最大文件大小为10兆字节。{ "log-driver": "json-file", "log-opts": { "max-size": "<max_size>", "max-file": "<max_file_count>" } }
<max_file_count>指定最大文件数量。当达到最大文件数量时,最旧的文件将被删除以腾出空间。例如,“max-file”: "5"将设置最多存储5个日志文件。 - 保存并关闭文件。
- 重新启动Docker daemon以使更改生效。
sudo systemctl restart docker
现在,您已经成功地使用json-file驱动程序来全局限制Docker日志大小。默认情况下,每个新的Docker容器都将使用json-file驱动程序,并且将遵循在daemon.json文件中设置的最大文件大小和最大文件数量限制。如果您需要更改特定容器的日志限制,可以在启动容器时覆盖默认设置。
PS:已经创建的容器并不会生效,需要销毁容器后重新创建,可通过docker inspect <container_id>
来进行查询容器详情
logrotate驱动程序
1.安装logrotate
logrotate是一个常用的Linux工具,它可以轮换日志文件并限制它们的大小。在安装logrotate之前,我们需要确保我们的操作系统上已经安装了它。如果你使用的是Debian或Ubuntu,你可以使用以下命令安装logrotate:
sudo apt-get update
sudo apt-get install logrotate
如果你使用的是CentOS或Fedora,你可以使用以下命令安装logrotate:
sudo yum install logrotate
2.创建logrotate配置文件
我们需要创建一个logrotate配置文件,该文件将告诉logrotate如何轮换我们的Docker日志文件。我们可以在/etc/logrotate.d目录中创建一个新的配置文件,例如:
sudo nano /etc/logrotate.d/docker-container
然后,在文件中添加以下内容:
/var/lib/docker/containers/*/*.log {
rotate 7
daily
size 10M
compress
missingok
delaycompress
copytruncate
}
这将告诉logrotate:
- 在/var/lib/docker/containers//.log中查找日志文件
- 轮换最近7天的日志文件
- 每天轮换一次日志文件
- 日志文件达到10MB时,轮换日志文件
- 使用gzip进行压缩
- 如果日志文件不存在,则不会产生错误
- 延迟压缩轮换的日志文件
- 使用copytruncate选项,轮换文件时将日志截断而不是重命名
3.重新启动Dokcer服务
最后,我们需要重新启动Docker服务以使配置生效:
sudo systemctl restart docker
现在,Docker将使用logrotate驱动程序来记录日志,并限制每个日志文件的大小。如果你的日志文件变得太大,logrotate会自动轮换它们,这将节省磁盘空间并提高性能。