Aristotle
发布于 2024-03-09 / 28 阅读 / 0 评论 / 0 点赞

docker 容器日志切割

docker 容器日志切割

参考:Docker容器日志管理最佳实践

docker的demon.json配置和日志大小限制

docker daemon.json

vim /etc/docker/daemon.json

{
"registry-mirrors": ["https://xxxxxxx.mirror.aliyuncs.com"],
"insecure-registries": ["www.xxxxxx.com:24188"],
"max-concurrent-downloads": 10,
"log-driver":"json-file",
"log-opts": {"max-size":"1024m", "max-file":"3"}
}


chatgpt

docker 容器的log保存在哪里

Docker 容器的日志通常保存在容器的文件系统内的特定位置,具体位置取决于您使用的日志驱动程序。默认情况下,Docker 使用 json-file 日志驱动程序,并将日志文件存储在主机的 /var/lib/docker/containers/<container-id>/ 目录下,每个容器都有一个单独的目录。在这个目录中,日志文件的名称以 <container-id>-json.log 的形式命名。

您可以使用以下命令来查看特定容器的日志文件位置:

bashCopy codedocker inspect --format='{{.LogPath}}' <container-id>

如果您想要查看容器的实时日志输出,可以使用 docker logs 命令。这个命令会输出容器的实时日志,可以用于监视容器的运行情况。

bashCopy codedocker logs -f <container-id>

这里的 -f 选项将实时跟踪日志输出,类似于 tail -f 命令的效果。

您可以对 Docker 容器的日志进行切割,以便管理日志文件的大小和数量。通常,切割日志可以避免单个日志文件变得过大,并确保日志文件数量有限,以便更好地管理和存储。

您可以通过以下几种方法进行日志切割:

1. 使用日志驱动程序

一些日志驱动程序可以自动进行日志切割。例如,journald 日志驱动程序可以设置日志的最大大小和保留的文件数。在创建容器时,您可以使用 --log-opt 选项来指定这些参数。

例如,设置日志的最大大小为 10MB,保留 5 个旧日志文件:

bashCopy codedocker run --log-driver=journald --log-opt max-size=10m --log-opt max-file=5 your_image

2. 手动切割

您可以使用一些工具手动切割 Docker 容器的日志。这些工具可以根据您的需求进行配置和调整。

  • Logrotate

    Logrotate 是一个 Linux 下的日志切割工具,可以用来定期切割和轮转日志文件。您可以为您的容器创建一个自定义的 logrotate 配置文件,然后使用 logrotate 命令定期切割日志文件。

    首先,在主机上创建一个 logrotate 配置文件,比如 /etc/logrotate.d/docker-container

    bashCopy code/var/lib/docker/containers/*/*.log {
        daily
        rotate 7
        compress
        missingok
        copytruncate
    }
    

    然后,您可以手动运行 logrotate 进行日志切割:

    bashCopy codelogrotate -f /etc/logrotate.d/docker-container
    

    这将会对 /var/lib/docker/containers/*/*.log 下的所有日志文件进行切割,保留最近 7 个日志文件,并进行压缩。

  • Docker 日志切割工具

    还有一些第三方工具可以帮助您自动化 Docker 容器日志的切割,例如 docker-logrotate。这是一个专门为 Docker 日志设计的 logrotate 替代方案,它可以帮助您管理容器日志的大小和数量。

    首先,您需要安装 docker-logrotate

    bashCopy codedocker run -d --name=docker-logrotate \
        --restart=always \
        -v /var/run/docker.sock:/var/run/docker.sock \
        camptocamp/docker-logrotate
    

    然后,您可以使用标签来指定容器的日志切割配置。例如:

    bashCopy codedocker run -d --name=my_container \
        --label com.camptocamp.logrotate.size=10M \
        --label com.camptocamp.logrotate.retention=5 \
        your_image
    

    这将为 my_container 容器设置日志的最大大小为 10MB,保留 5 个旧日志文件。

这些方法可以帮助您管理 Docker 容器的日志,确保它们不会变得过大,并且保留您需要的数量。请根据您的需求选择适合的方法。