基于本文回答

播面 播面

文解图解播客视频,多维讲透八股文
0
评论

如何查看容器的日志?如果日志文件过大,如何进行实时追踪或限制输出行数?

在 Docker 中,查看和管理容器日志最常用的命令是 docker logs

针对你提到的查看、实时追踪以及限制输出行数的需求,以下是具体的命令和操作方法:


1. 基础查看:限制输出行数

如果日志文件非常大,直接运行 docker logs <容器名> 会导致终端被瞬间刷屏,甚至导致终端卡死。此时应该使用 --tail 参数来限制输出的行数。

  • 查看最后 100 行日志:
    bash
    docker logs --tail 100 <容器名或容器ID>
  • 查看最近 5 分钟内的日志:
    bash
    docker logs --since 5m <容器名>
    (同理,1h 表示 1 小时,2023-10-01 可以指定具体日期)

2. 实时追踪(动态滚屏)

类似于 Linux 中的 tail -f,你可以使用 -f--follow 参数来实时查看新产生的日志。

  • 实时追踪日志(从头开始输出所有历史并持续追踪):
    bash
    docker logs -f <容器名>
  • 【推荐】限制行数 + 实时追踪:
    为了防止历史日志过多,通常会结合 --tail 使用。例如,只看最后 50 行,并开始实时追踪:
    bash
    docker logs -f --tail 50 <容器名>

3. 进阶技巧:过滤与排查

  • 显示日志时间戳 (-t):
    在排查性能问题时非常有用,可以看清每行日志的具体生成时间。
    bash
    docker logs -f -t --tail 10 <容器名>
  • 结合 grep 过滤关键字:
    如果只想看包含 "error" 或 "exception" 的日志:
    bash
    docker logs <容器名> 2>&1 | grep -i "error"
    (注意:Docker 的日志分为 stdout 和 stderr,所以需要用 2>&1 把标准错误重定向到标准输出,才能用 grep 过滤)

4. 终极解决方案:如何防止日志文件过大占用磁盘?

如果容器长期运行,日志文件会无限增长,最终可能撑爆宿主机磁盘。可以通过以下两种方式限制日志大小:

方法 A:在创建容器时限制(单容器生效)

docker run 时加上日志驱动参数:

bash
docker run -d \
  --log-driver json-file \
  --log-opt max-size=10m \
  --log-opt max-file=3 \
  --name my-app nginx

解释:该容器的日志文件最大为 10MB,最多保留 3 个归档文件(即最大占用 30MB 空间)。

方法 B:修改 Docker 全局配置(所有新容器生效)

修改/创建 /etc/docker/daemon.json 文件,添加以下内容:

json
{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "50m",
    "max-file": "3"
  }
}

保存后重启 Docker 服务:

bash
systemctl restart docker

(注意:此设置仅对新创建的容器生效,已有容器需要重建)


5. 临时清理:如何手动清空当前容器的日志?

如果你发现某个容器日志已经几十G了,想立刻清空它,不要直接删除日志文件(会导致 Docker 无法写入)。可以使用以下命令安全地清空:

bash
# 找到日志文件的路径并清空
truncate -s 0 $(docker inspect --format='{{.LogPath}}' <容器名>)