我使用docker logs [container-name]来查看特定容器的日志。
有什么优雅的方法来清除这些日志吗?
我使用docker logs [container-name]来查看特定容器的日志。
有什么优雅的方法来清除这些日志吗?
当前回答
我更喜欢这个(从上面的解决方案):
truncate -s 0 /var/lib/docker/containers/*/*-json.log
然而,我正在运行几个系统(Ubuntu 18。x Bionic为例),该路径不能正常工作。Docker是通过Snap安装的,所以到容器的路径更像:
truncate -s 0 /var/snap/docker/common/var-lib-docker/containers/*/*-json.log
其他回答
不确定这是否对您有帮助,但删除容器总是有帮助的。
所以,如果你使用docker-compose进行安装,你可以简单地使用docker-compose down && docker-compose up -d而不是docker-compose restart。通过适当的设置(确保对持久数据使用卷挂载),您不会以这种方式丢失任何数据。
当然,这比任务要求的要多。但是在各种情况下,其他答案都不起作用(如果使用远程docker服务器或在Windows机器上工作,访问底层文件系统是私有的,而且很困难)
Docker为Mac用户,这里是解决方案:
查找日志文件路径: $ docker inspect | grep日志 SSH进入docker机器(假设名称是默认的,如果不是,运行docker-machine ls来查找): $ docker-machine SSH默认 更改为root用户(参考): $ sudo -i 删除日志文件内容: $ echo "" > log_file_path_from_step1 .
Docker系统修剪 在命令提示符下执行该命令
Linux / Ubuntu:
如果您有多个容器,而您只想删除一个日志,而不想删除其他日志。
(如果你有类似“权限被拒绝”的问题,请先sudo su。) 列出所有容器:docker ps -a 寻找您想要的容器并复制container ID。例子:E1X2A3M4P5L6。 容器文件夹和真实名称比E1X2A3M4P5L6长,但前12个字符是docker ps -a中产生的。 只删除日志: > /var/lib/docker/containers/E1X2A3M4P5L6*/E1X2A3M4P5L6*-json.log(替换E1X2A3M4P5L6为您的结果!!)
正如您所看到的,在/containers内部是容器,logs具有相同的名称,但在结尾使用-json.log。你只需要知道前12个字符,因为*意味着“任何东西”。
通过设置日志清除功能,可以定期清除日志。
“/etc/logrotate.d/docker-logs”文件示例
/var/lib/docker/containers/*/*.log {
rotate 7
daily
compress
size=50M
missingok
delaycompress
copytruncate
}