在默认情况下,Docker 的日志驱动器是 json-file
,这意味着容器的日志会保存到 JSON 格式的文件中。这个驱动器会将容器的标准输出和标准错误输出写入到一个或多个 JSON 格式的文件中,这些文件通常位于容器的 /var/lib/docker/containers/<container-id>/
目录下。
如果没有显式指定 --log-driver
,则 Docker 将使用默认的 json-file
驱动器。在这种情况下,日志文件会持续增长,直到达到磁盘的限制。因此,如果你使用默认配置,建议定期检查和管理容器的日志,以避免占用过多磁盘空间。
当你配置 --log-opt max-size=100m
时,表示设置容器的日志文件最大大小为 100MB。一旦日志文件达到这个大小,Docker 将自动创建一个新的日志文件,并将日志继续写入新文件。旧的日志文件将保留在磁盘上,除非使用日志管理工具或手动进行清理,否则这些旧的日志文件可能会一直存在。
Docker 默认会将容器的日志文件存放在宿主机的 /var/lib/docker/containers/<container-id>/
目录下。在这个目录中,每个运行的容器都有一个唯一的标识符(<container-id>
),并在该目录下创建一个子目录以存储该容器的相关数据,包括日志文件。
例如,如果你有一个运行中的容器,其容器标识符是 abcdef123456
,那么该容器的日志文件将存储在路径 /var/lib/docker/containers/abcdef123456/
中。
logrotate
是一个常用的日志轮转工具,用于管理和轮转日志文件。它可以帮助你定期备份、压缩和删除旧的日志文件,以便更好地管理磁盘空间。以下是使用 logrotate
来轮转 Docker 容器日志文件的基本步骤:
- 安装 logrotate: 如果你的系统上没有安装
logrotate
,你需要先安装它。具体的安装方式取决于你使用的操作系统。在大多数 Linux 发行版上,你可以使用包管理工具来安装logrotate
。例如,在 Ubuntu 上,可以运行以下命令:sudo apt-get install logrotate - 配置 logrotate: 创建一个 logrotate 配置文件,以告诉 logrotate 如何处理 Docker 容器的日志文件。在
/etc/logrotate.d/
目录下创建一个新文件,例如docker-containers
,并添加以下内容:
/var/lib/docker/containers/*/*.log {
rotate 7
daily
compress
missingok
delaycompress
copytruncate
}
rotate 7
: 保留过去7个日志文件,旧的将被删除。daily
: 每天轮转一次。compress
: 使用 gzip 压缩旧的日志文件。missingok
: 如果日志文件不存在,忽略而不报错。delaycompress
: 在下一次轮转时才压缩。copytruncate
: 将当前日志文件复制为新文件,然后截断原文件,这样容器可以继续写入。
- 手动运行
logrotate
进行测试
sudo logrotate -d /etc/logrotate.conf
- 默认情况下,logrotate 通常由定时任务自动触发。查看系统的定时任务设置,确保 logrotate 定期执行。在大多数 Linux 发行版上,logrotate 的定时任务通常存储在
/etc/cron.daily/
目录中
注:上述内容摘抄自网络