azure 如何根据时间戳清除Docker容器日志?

d8tt03nd  于 2023-08-07  发布在  Docker
关注(0)|答案(1)|浏览(112)

我希望根据特定的时间戳自动清除Docker容器日志,例如删除30分钟以上的日志。但是,我在配置编写文件以实现这一点时遇到了麻烦。目前,我只能使用max-size来控制日志文件的大小:“”属性,将其限制为4KB。我可以通过Docker Compose文件来完成这个任务吗?如果没有,我如何实现这个目标?下面是我一直在使用的Docker Composose文件:

version: "3"
services:
  azure-function-app:
    build:
      context: .
      dockerfile: FunctionApp01/Dockerfile
    image: functionapp-nolimit
    container_name: function_app-nolimit
    restart: unless-stopped
    tty: true
    ports:
      - "8081:80"
    logging:
      options:
        max-size: "4k"

字符串
我尝试根据大小限制清理日志。但是,当超过大小限制时,所有以前的日志都会被删除,这不符合我的目标。我的目标是删除比特定时间戳早的日志。

fcg9iug3

fcg9iug31#

不幸的是,*Docker compose不提供清除所有容器日志的内置方法。*为了清除日志,您可以使用docker cli命令或第三方依赖项(如logrotate),根据CRON计划自动创建,旋转和删除日志文件。
我正在运行一个示例Azure Functions Docker映像,并运行以下命令来清除从此Blog和此
SO线程答案
引用的日志:-

docker内部运行的函数app:-

docker ps

字符串
x1c 0d1x的数据

访问日志文件:-

docker inspect --format='{{.LogPath}}' ac98


清除日志:-

回显一个空字符串,这样日志文件将被清除,如下所示:

sudo sh -c 'echo "" > $(docker inspect --format="{{.LogPath}}" ac98)'


另一种选择是使用tail命令并将日志限制为特定的行,此方法将忽略日志中的其他行。

docker logs ac98 --tail 1
docker logs ac98 --tail 100 --since 1h
docker logs ac98 --tail 100 --since 1h



另一种选择是在Docker compose中使用第三方依赖项,使用logrotate,如下所示:

/path/to/your/log/file {
    daily
    rotate 7
    compress
    delaycompress
    missingok
    notifempty
    dateext
    dateformat -%Y-%m-%d-%s
    maxage 30m
}


此配置文件将擦除30分钟以上的日志,最多保留7个循环日志,并每天循环一次日志文件。要自动删除Docker容器日志,您可以将此配置文件存储在/etc/logrotate.d/这样的位置,并将logrotate作为cron作业执行。

相关问题