📅  最后修改于: 2023-12-03 14:53:12.864000             🧑  作者: Mango
在使用docker-compose运行容器时,有时候容器的日志会占用很大的磁盘空间,为了释放磁盘空间,需要定期清理这些日志。下面介绍如何清除docker-compose日志。
可以通过进入容器的终端,手动删除容器中的日志文件。
# 进入容器的终端
$ docker-compose exec <service_name> sh
# 删除日志文件
$ rm /var/log/<log_file_name>
这种方法的缺点是比较麻烦,需要进入每个容器的终端手动删除日志文件,而且容易误删文件,不是很安全。
docker-compose logs命令可以打印出容器的日志信息,包括stdout和stderr。可以使用该命令过滤出需要的日志信息,然后使用grep命令删除。
# 打印出所有容器的日志信息
$ docker-compose logs
# 过滤出某个容器的日志信息
$ docker-compose logs <service_name>
# 删除容器某个日志文件的日志记录
$ docker-compose logs <service_name> | grep "<log_file_name>" -v > /path/to/log/file
该方法需要使用grep命令进行过滤,可以过滤掉需要保留的日志信息,然后将剩余的日志信息保存到指定的文件中。这种方法比较安全,可以避免误删日志文件。
logrotate是一个系统级别的工具,可以管理各种日志文件。logrotate可以配置定期删除日志文件,同时也可以对日志文件进行gzip压缩,可以减小日志文件的大小。
使用logrotate需要在容器的主机上进行配置。在使用docker-compose时,logrotate的配置可以在docker-compose.yml文件中进行。
version: '3'
services:
nginx:
image: nginx:latest
volumes:
- ./logs:/var/log/nginx
deploy:
# ...
syslog:
driver: syslog
options:
syslog-address: "tcp://my-remote-syslog-server:9000"
logrotate:
image: blacklabelops/logrotate:latest
volumes:
- ./logrotate.conf:/etc/logrotate.conf
- ./logs:/logs
deploy:
# ...
在上面的docker-compose.yml文件中,我们配置了一个名为logrotate的服务,它使用blacklabelops/logrotate:latest镜像,并且定义了两个volume,一个用于挂载logrotate的配置文件,另一个用于挂载日志文件目录。这样可以对该容器中指定的日志文件进行周期性的删除和压缩。
上面三种方法,手动删除日志文件是最简单的方法,但是比较麻烦,并且有一定的风险。使用docker-compose logs命令可以过滤出需要删除的日志信息,比较安全。使用logrotate可以实现自动化操作,但是需要在主机上进行配置。