docker日志相关

本文最后更新于 2025年2月14日 凌晨

Docker 容器的日志管理是运维工作中的重要一环。本文将全面介绍 Docker 日志的查看方法、存储位置、清理技巧以及日志轮转配置,帮助你更好地掌握容器日志管理,避免日志占用过多磁盘空间。

查看日志

Docker 日志是运行中容器的控制台输出,来源于容器内进程的标准输出(stdout)和标准错误(stderr)。

使用以下命令可以查看特定容器的日志,默认会显示容器启动以来的所有日志:

1
docker logs <容器名或容器ID>

示例:

1
docker logs uptime-kuma

添加 -f 参数可以实时跟踪日志输出:

1
docker logs -f uptime-kuma

当容器日志过多时,可以使用 --tail 参数指定只显示最后的 N 条日志:

1
docker logs --tail 100 uptime-kuma

如果需要查看特定时间段的日志,可以使用 --since--until 参数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 查看过去 20 分钟内的日志
docker logs --since 20m uptime-kuma

# 查看过去 1 小时内的日志
docker logs --since 1h uptime-kuma

# 查看指定时间之后的日志
docker logs --since 2025-02-13T10:00:00 uptime-kuma

# 查看 20 分钟之前的日志
docker logs --until 20m uptime-kuma

# 查看指定时间之前的日志
docker logs --until 2025-02-13T10:00:00 uptime-kuma

日志存储位置

Docker 会将容器的日志内容保存到磁盘上。随着时间的推移,日志文件可能会变得非常大,导致硬盘空间被占满。例如,一个运行了一年的容器,其日志文件可能已经达到 5GB。如果不进行清理,VPS 的硬盘空间可能会被悄悄耗尽。

容器的日志文件保存在 /var/lib/docker/containers 目录下,每个容器以其容器 ID 为子目录名。注意,从该目录开始的所有子目录需要管理员权限才能访问。

查看容器目录:

1
sudo ls /var/lib/docker/containers

示例输出:

1
2
3
154bb2ac6fe4f13625989689039309689bb40fefb34bdf98f5bde45d8c5a5
51ca46c5457831cdf817934d0441aff0a6102ce595b59d4ac666347a51e7e
...

您可以使用 docker ps 命令列出所有容器,来查看容器名称与容器 ID 的对应关系。也可以使用 docker inspect 获取容器的详细信息:

1
docker inspect --format='{{.Name}}' <容器ID>

进入对应容器的目录后,其中以 <容器ID>-json.log 命名的文件就是该容器的日志文件:

1
sudo ls /var/lib/docker/containers/<容器ID>

示例输出:

1
2
3
4
5
6
7
8
9
10
<容器ID>-json.log
checkpoints
config.v2.json
hostconfig.json
hostname
hosts
mounts
resolv.conf
resolv.conf.hash
...

如果在 /var/lib/docker/containers 目录中没有找到日志文件,可以通过以下命令查看日志文件路径:

1
docker inspect --format='{{.LogPath}}' <容器ID>

要查看所有日志文件的大小,可以使用以下命令:

1
sudo find /var/lib/docker/containers/ -name '*-json.log' -exec du -h {} + | sort -hr

示例输出:

1
2
3
4
5.3G    /var/lib/docker/containers/8bcfe5.../8bcfe5...-json.log
914M /var/lib/docker/containers/5e85e2.../5e85e2...-json.log
52M /var/lib/docker/containers/e6fc6d.../e6fc6d...-json.log
...

清理日志

重启容器并不会清空日志文件,因为日志文件只有在被删除并重新创建时才会重置。

如果您使用 1Panel,可以进入容器管理页面,找到对应容器的日志选项,然后点击“清空日志”按钮。

在命令行中,可以使用 truncate 命令清空日志文件:

1
sudo truncate -s 0 /var/lib/docker/containers/<容器ID>/<容器ID>-json.log

清空所有容器的日志文件:

1
sudo truncate -s 0 /var/lib/docker/containers/*/*-json.log

为了防止日志文件过大,可以配置 Docker 的日志轮转功能。编辑 Docker 的配置文件:

1
sudo vim /etc/docker/daemon.json

添加或修改以下内容:

1
2
3
4
5
6
7
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "10"
}
}

上述配置表示,当当前日志文件达到 10MB 时,Docker 会将其轮转(重命名并创建新的日志文件)。最多保留 10 个轮转日志文件(包括当前文件在内共 11 个),超过数量的旧日志文件将自动删除。

保存配置文件后,重启 Docker 服务使新配置生效:

1
sudo systemctl restart docker

通过以上方法,您可以有效地管理 Docker 容器的日志,避免日志文件过大占用磁盘空间。


docker日志相关
https://blog.kala.love/posts/e3834a49/
作者
久远·卡拉
发布于
2025年2月14日
许可协议