我在VM上运行容器。我的容器默认将日志写入/var/lib/docker/containers/CONTAINER_ID/CONTAINER_ID-json.log文件,直到磁盘已满。
当前,我必须手动删除此文件,以避免磁盘已满。我读到在Docker 1.8中会有一个参数来旋转日志。您会建议什么作为当前解决方法?
我在VM上运行容器。我的容器默认将日志写入/var/lib/docker/containers/CONTAINER_ID/CONTAINER_ID-json.log文件,直到磁盘已满。
当前,我必须手动删除此文件,以避免磁盘已满。我读到在Docker 1.8中会有一个参数来旋转日志。您会建议什么作为当前解决方法?
journald
日志驱动程序,并记录日志担心日志轮换。
/usr/lib/systemd/system/docker.service
可能是该文件。我不确定在CoreOS上。在CentOS上,这就是位置。至于其他问题,您需要更改Docker守护程序的选项以journald
用作日志记录驱动程序。然后它将使用日记记录日志容器,而不是登录/var/lib/docker/containers/CONTAINER_ID/CONTAINER_ID-json.log
。如果我缺少某些东西,@ larsks可以纠正我。
Answers:
注意:这仅适用于docker-compose版本2
例:
version: '2'
services:
db:
container_name: db
image: mysql:5.7
ports:
- 3306:3306
logging:
options:
max-size: 50m
警告:此文章与<1.8的docker版本有关(没有该--log-opt
选项)
为什么不使用logrotate(它也支持压缩)?
/var/lib/docker/containers/*/*-json.log {
hourly
rotate 48
compress
dateext
copytruncate
}
直接在您的CoreOs节点上配置它,或部署一个容器(例如https://github.com/tutumcloud/logrotate),该容器可挂载/ var / lib / docker来旋转日志。
[此答案涵盖了被问到很久之后遇到此问题的人员的最新版本的Docker。]
要为所有新创建的容器设置默认日志限制,可以在/etc/docker/daemon.json中添加以下内容:
{
"log-driver": "json-file",
"log-opts": {"max-size": "10m", "max-file": "3"}
}
然后,systemctl reload docker
如果您使用的是systemd,请重新加载docker(否则,请使用相应的重新启动命令进行安装)。
您也可以使用类似的文件切换到本地日志记录驱动程序:
{
"log-driver": "local",
"log-opts": {"max-size": "10m", "max-file": "3"}
}
本地日志记录驱动程序以内部格式(我相信protobufs)存储日志内容,因此您将在相同大小的日志文件中获得更多的日志内容(或为相同的日志占用更少的文件空间)。本地驱动程序的缺点是外部工具(例如日志转发器)可能无法解析原始日志。要注意的docker logs
只有作品当日志驱动程序设置为json-file
,local
或journald
。
这max-size
是对docker日志文件的限制,因此它包括json或本地日志格式化开销。并且max-file
是docker将维护的日志文件数。在一个文件上达到大小限制后,将轮换日志,如果超过则删除最早的日志max-file
。
有关更多详细信息,Docker拥有以下站点上所有驱动程序的文档:https : //docs.docker.com/config/containers/logging/configure/
我也有一个介绍该主题的演讲。使用P
查看演示说明:https://sudo-bmitch.github.io/presentations/dc2019/tips-and-tricks-of-the-captains.html#logs
--log-driver=none
。如果只想禁用特定容器的日志,则可以--log-driver=none
在docker run
命令中使用来启动它们。另一种选择是将外部存储安装到/var/lib/docker
。例如NFS共享或具有比所讨论的主机更大的存储容量的东西。