1. 概述

在使用 containerd 运行容器化工作负载时,如果遇到问题,通常第一反应是查看日志。但与 Docker 不同,containerd 本身并没有提供一个开箱即用的日志查看机制,这给调试带来一定挑战。

本文将介绍如何通过常用客户端如 nerdctlcrictl 查看 containerd 服务日志以及容器日志,方便快速定位问题。

2. containerd 的日志存储位置

containerd 本质上是一个守护进程(daemon),通常以两种方式运行:

作为 systemd 服务运行:在这种情况下,其日志由 systemd 的 journald 统一管理。
在终端中直接运行:日志输出到标准输出(stdout/stderr)。

对于容器本身产生的日志,containerd 并不直接负责存储和管理,这部分日志通常由上层客户端(如 nerdctlcrictl)或 Kubernetes 的 kubelet 来处理。

3. 查看 containerd 自身日志

3.1 使用 journalctl 查看日志

大多数现代 Linux 系统都使用 systemd 来管理服务,containerd 也不例外。我们可以使用 journalctl 命令查看其日志:

# 查看 containerd 最近日志
journalctl -xeu containerd.service

也可以查看特定时间段的日志,比如最近 40 分钟:

journalctl -xeu containerd --since "40 min ago"

⚠️ 注意:这些命令只在 containerd 作为 systemd 服务运行时有效。如果不是,需要先配置 systemd 服务。

3.2 直接运行 containerd 查看日志

如果你是手动启动 containerd,可以直接运行:

containerd

此时日志会实时输出到终端。如果想后台运行并保存日志到文件:

containerd > containerd.log 2>&1 &

之后可以用 tailless 查看日志内容:

tail -f containerd.log

这种方式适合调试时使用。

4. 查看容器日志

containerd 本身不提供查看容器日志的功能,需要借助客户端工具来实现。以下是几种常见方式。

4.1 使用 nerdctl 查看日志

nerdctl 是一个兼容 Docker 命令风格的 containerd 客户端,支持查看容器日志。

安装完成后,使用以下命令查看日志:

nerdctl logs <容器名或ID>

要实时查看日志流:

nerdctl logs -f <容器名或ID>

⚠️ 注意:nerdctl 只会为使用 -d 参数启动的容器记录日志。

日志文件默认存储在 /var/lib/nerdctl/ 目录下。

4.2 使用 crictl 查看日志

crictl 是 Kubernetes CRI(容器运行时接口)的调试工具,也支持直接与 containerd 交互。

安装完成后,使用如下命令查看日志:

crictl logs <容器名或ID>

实时查看日志:

crictl logs -f <容器名或ID>

相比 nerdctlcrictl 的日志功能更稳定,适合用于生产环境调试。

4.3 查看 /var/log/containers 目录下的日志文件

在 Kubernetes 环境中,kubelet 负责管理节点上的容器日志,并将它们保存在 /var/log/containers 目录下。

日志文件的命名格式如下:

/var/log/containers/<pod_name>_<namespace>_<container_name>-<container_id>.log

例如,查看名为 ecommerce-backend 的容器日志:

cat /var/log/containers/backend_public_ecommerce-backend-545wt6s8fd8s7df8sd7af68.log

文件名中的 container_id 是一个唯一标识符,确保每个容器实例的日志都能独立保存。

5. 总结

本文介绍了如何查看 containerd 的服务日志和容器日志:

  • containerd 自身日志可通过 journalctl 或直接运行命令查看。
  • ✅ 容器日志需借助客户端工具如 nerdctlcrictl 或通过 /var/log/containers 文件查看。
  • ⚠️ 注意不同客户端对日志的支持情况,尤其是 nerdctl 需要用 -d 参数启动容器才能记录日志。

掌握这些方法,有助于在排查容器运行问题时更快定位原因,避免踩坑。


原始标题:View containerd Logs