Docker容器日志占用了我所有的磁盘空间

时间:2015-08-05 10:16:09

标签: logging docker coreos diskspace

我正在VM上运行容器。我的容器默认将日志写入/var/lib/docker/containers/CONTAINER_ID/CONTAINER_ID-json.log文件,直到磁盘已满。

目前,我必须手动删除此文件以避免磁盘已满。我在Docker 1.8中看到,rotate the logs会有一个参数。 你推荐什么作为当前的解决方法?

7 个答案:

答案 0 :(得分:73)

Docker 1.8已经发布,带有日志轮换选项。添加:

--log-opt max-size=50m 

当容器启动时就可以了。您可以在以下网站了解更多 https://docs.docker.com/engine/admin/logging/overview/

答案 1 :(得分:28)

注意:这仅适用于docker-compose版本2

示例:

version: '2'
services:
  db:
    container_name: db
    image: mysql:5.7
    ports:
      - 3306:3306
    logging:
      options:
        max-size: 50m

答案 2 :(得分:7)

警告:此帖子与docker版本有关< 1.8(没有--log-opt选项)

为什么不使用logrotate(也支持压缩)?

/var/lib/docker/containers/*/*-json.log {
hourly
rotate 48
compress
dateext
copytruncate
}

直接在CoreOs节点上配置它,或者部署一个容器(例如https://github.com/tutumcloud/logrotate),它安装/ var / lib / docker来旋转日志。

答案 3 :(得分:2)

在运行容器时传递日志选项。一个例子如下

sudo docker run -ti --name visruth-cv-container  --log-opt max-size=5m --log-opt max-file=10 ubuntu /bin/bash

其中--log-opt max-size=5m指定最大日志文件大小为5MB,--log-opt max-file=10指定最大旋转文件数。

答案 4 :(得分:0)

docker-compose版本1的示例:

mongo:
  image: mongo:3.6.16
  restart: unless-stopped
  log_opt:
    max-size: 1m
    max-file: "10"

答案 5 :(得分:0)

[此答案涵盖了被问了很久之后遇到此问题的人的最新docker版本。]

要为所有新创建的容器设置默认日志限制,可以在/etc/docker/daemon.json中添加以下内容:

fseek

如果您使用的是systemd,则用{ "log-driver": "json-file", "log-opts": {"max-size": "10m", "max-file": "3"} } 重新加载docker(否则,使用适当的重启命令进行安装)。

您也可以使用类似的文件切换到本地日志记录驱动程序:

systemctl reload docker

本地日志记录驱动程序以内部格式(我相信protobufs)存储日志内容,因此您将在相同大小的日志文件中获得更多的日志内容(或为相同的日志占用更少的文件空间)。本地驱动程序的缺点是外部工具,例如日志转发器,可能无法解析原始日志。请注意,{ "log-driver": "local", "log-opts": {"max-size": "10m", "max-file": "3"} } 仅在日志驱动程序设置为docker logsjson-filelocal时有效。

journald是对docker日志文件的限制,因此它包括json或本地日志格式化开销。 max-size是docker将维护的​​日志文件数。在一个文件上达到大小限制后,将轮换日志,并在超过max-file时删除最早的日志。

有关更多详细信息,Docker在以下位置提供了有关所有驱动程序的文档:https://docs.docker.com/config/containers/logging/configure/

我也有一个介绍该主题的演讲。使用max-file查看演示者注释:https://sudo-bmitch.github.io/presentations/dc2019/tips-and-tricks-of-the-captains.html#logs

答案 6 :(得分:0)

使用compose 3.9,您可以对日志设置如下限制

version: "3.9"
services:
  some-service:
    image: some-service
    logging:
      driver: "json-file"
      options:
        max-size: "200k"
        max-file: "10"

上面显示的示例将存储日志文件,直到它们达到 200kB 的最大大小,然后旋转它们。存储的单个日志文件的数量由 max-file 值指定。随着日志增长超过最大限制,旧日志文件将被删除以允许存储新日志。

可用的日志选项取决于您使用的日志驱动程序

  • 上述 controlling log files and sizes 示例使用了特定于 json-file driver 的选项。这些特定选项在其他日志驱动程序上不可用。有关受支持的日志驱动程序及其选项的完整列表,请参阅日志驱动程序文档。

注意:只有 json-filejournald 驱动程序可以直接从 docker-compose up 和 docker-compose 日志中获取日志。使用任何其他驱动程序不会打印任何日志。

来源:https://docs.docker.com/compose/compose-file/compose-file-v3/