文章目录
- [1. 实战概述](#1. 实战概述)
- [2. 实战步骤](#2. 实战步骤)
-
- [2.1 使用默认日志驱动 - json-file](#2.1 使用默认日志驱动 - json-file)
-
- [2.1.1 查看日志驱动](#2.1.1 查看日志驱动)
- [2.1.2 启动测试容器](#2.1.2 启动测试容器)
- [2.1.3 查看日志信息](#2.1.3 查看日志信息)
- [2.1.4 查看日志文件路径](#2.1.4 查看日志文件路径)
- [2.1.5 查看日志文件内容](#2.1.5 查看日志文件内容)
- [2.2 使用非默认日志驱动 - syslog](#2.2 使用非默认日志驱动 - syslog)
-
- [2.2.1 确保rsyslog启用imuxsock](#2.2.1 确保rsyslog启用imuxsock)
- [2.2.2 启动测试容器](#2.2.2 启动测试容器)
- [2.2.3 查看日志信息](#2.2.3 查看日志信息)
- [2.2.4 查看日志文件路径](#2.2.4 查看日志文件路径)
- [2.3 修改默认日志驱动](#2.3 修改默认日志驱动)
-
- [2.3.1 设置默认日志驱动](#2.3.1 设置默认日志驱动)
- [2.3.2 重载并重启Docker](#2.3.2 重载并重启Docker)
- [2.3.3 启动测试容器](#2.3.3 启动测试容器)
- [2.3.4 检查容器采用的日志驱动](#2.3.4 检查容器采用的日志驱动)
- [2.3.5 查看日志文件内容](#2.3.5 查看日志文件内容)
- [3. 实战总结](#3. 实战总结)
1. 实战概述
- 本次实战通过对比
json-file与syslog两种日志驱动,演示了 Docker 容器日志的本地存储与系统日志集成方式,并成功将默认日志驱动全局配置为syslog,实现日志集中化管理。
2. 实战步骤
2.1 使用默认日志驱动 - json-file
2.1.1 查看日志驱动
- 执行命令:
docker info | grep -i logging

- 结果说明 :当前 Docker 日志驱动为
json-file,表示容器日志以 JSON 格式写入本地文件(如/var/lib/docker/containers/<id>/<id>-json.log),可通过docker logs查看。未启用 syslog 或其他远程日志驱动。
2.1.2 启动测试容器
-
执行命令
shelldocker run -d \ --name testlog1 \ --log-opt tag="testlog1" \ busybox \ sh -c 'i=1; while true; do echo "Message $((i++)) from testlog1"; sleep 1; done'
- 结果说明 :已成功启动名为
testlog1的容器,使用默认日志驱动(json-file),并设置日志标签为testlog1。容器内执行循环脚本,持续输出消息至 stdout,日志将被 Docker 捕获并存储在本地文件中。
- 结果说明 :已成功启动名为
2.1.3 查看日志信息
-
查看前3条日志
- 执行命令:
docker logs testlog1 | head -3

- 结果说明 :通过
docker logs testlog1 | head -3成功获取容器testlog1的前 3 条日志,显示初始输出内容为 "Message 1 from testlog1" 至 "Message 3 from testlog1",验证了日志可正常读取并按需截取。
- 执行命令:
-
查看指定时间范围内的日志
- 执行命令:
docker logs -f --since="2025-12-29T10:23:19" --until="2025-12-29T10:23:25" testlog1

- 结果说明 :成功获取容器
testlog1在指定时间范围(2025-12-29T10:23:19 至 10:23:25)内的日志,共输出 6 条消息,显示日志按时间筛选功能正常,且容器持续运行并产生日志。
- 执行命令:
-
查看最后3条日志
- 执行命令:
docker logs --tail 3 testlog1

- 结果说明 :成功使用
docker logs --tail 3 testlog1获取容器testlog1的最后 3 条日志,输出显示为 Message 980 至 982,验证了日志尾部内容可正常查看,符合预期。
- 执行命令:
2.1.4 查看日志文件路径
- 执行命令:
docker inspect testlog1 | grep -i LogPath

- 结果说明 :容器
testlog1的日志路径为/var/lib/docker/containers/.../json.log,表明使用默认json-file日志驱动,日志以 JSON 格式存储在本地文件中,可通过docker logs查看。
2.1.5 查看日志文件内容
- 执行命令:
cat /var/lib/docker/containers/4e83e4fa3eb483c79b5fbeebb8818be3365bd09281b485d65c3537a7bf045d55/4e83e4fa3eb483c79b5fbeebb8818be3365bd09281b485d65c3537a7bf045d55-json.log | head -3

- 结果说明 :查看了容器
testlog1的日志文件,内容为 JSON 格式,包含每条日志的输出内容、时间戳和标签(tag),验证了默认json-file日志驱动将 stdout/stderr 写入本地文件,且数据结构完整。
2.2 使用非默认日志驱动 - syslog
2.2.1 确保rsyslog启用imuxsock
- 执行命令:
sed -i 's/^#\(.*imuxsock.*\)/\1/' /etc/rsyslog.conf

- 结果说明 :执行
sed -i 's/^#\(.*imuxsock.*\)/\1/' /etc/rsyslog.conf命令,成功将/etc/rsyslog.conf中以#开头的imuxsock模块行取消注释,使其启用,以便接收 Docker 通过 Unix socket 发送的日志。 - 执行命令:
systemctl restart rsyslog

- 结果说明 :执行
systemctl restart rsyslog成功重启 rsyslog 服务,使配置文件中的修改(如启用 imuxsock 模块)生效,确保 Docker 日志可通过 syslog 驱动正常发送并记录。
2.2.2 启动测试容器
-
执行命令
shelldocker run -d \ --name testlog2 \ --log-driver=syslog \ --log-opt tag="testlog2" \ busybox \ sh -c 'i=1; while true; do echo "Message $((i++)) from testlog2"; sleep 1; done'
- 结果说明 :成功启动名为
testlog2的容器,使用syslog日志驱动,并设置标签为testlog2,容器内执行循环脚本持续输出日志,日志将通过 syslog 发送到系统日志服务(如 rsyslog),不再写入本地文件。
- 结果说明 :成功启动名为
2.2.3 查看日志信息
-
查看前3条日志
-
执行命令:
docker logs testlog2 | head -3

-
结果说明 :通过
docker logs testlog2 | head -3成功获取容器testlog1的前 3 条日志,显示初始输出内容为 "Message 1 from testlog2" 至 "Message 3 from testlog2",验证了日志可正常读取并按需截取。
-
-
查看指定时间范围内的日志
-
执行命令:
docker logs -f --since="2025-12-29T10:56:19" --until="2025-12-29T10:56:25" testlog2

-
结果说明 :成功获取容器
testlog2在指定时间范围(2025-12-29T10:56:19 至 10:56:25)内的日志,共输出 6 条消息,显示日志按时间筛选功能正常,且容器持续运行并产生日志。
-
-
查看最后3条日志
-
执行命令:
docker logs --tail 3 testlog2

-
结果说明 :成功使用
docker logs --tail 3 testlog1获取容器testlog1的最后 3 条日志,输出显示为 Message 253 至 255,验证了日志尾部内容可正常查看,符合预期。
-
2.2.4 查看日志文件路径
-
执行命令:
docker inspect testlog2 | grep -i LogPath

-
结果说明 :容器
testlog2的LogPath为空,表明其使用了非默认日志驱动(如 syslog),日志不写入本地文件,而是通过 syslog 驱动发送至系统日志服务,符合预期配置。 -
执行命令:
grep testlog2 /var/log/messages

-
结果说明 :通过
grep testlog2 /var/log/messages成功查到容器testlog2的日志输出,显示其日志已通过 syslog 驱动正确发送至系统日志文件,每条日志包含标签、进程号和消息内容,验证了 syslog 日志驱动配置生效。
2.3 修改默认日志驱动
2.3.1 设置默认日志驱动
-
执行命令:
vim /etc/docker/daemon.json,编辑Docker守护进程配置文件

-
结果说明 :配置文件中设置默认日志驱动为
syslog,并指定设施为local0,标签格式为容器名与ID组合,实现容器日志统一通过 syslog 输出,便于集中管理和监控。
2.3.2 重载并重启Docker
- 执行命令:
systemctl daemon-reload

- 执行命令:
systemctl restart docker

2.3.3 启动测试容器
-
执行命令
shelldocker run -d \ --name testlog3 \ --log-opt tag="testlog3" \ busybox \ sh -c 'i=1; while true; do echo "Message $((i++)) from testlog3"; sleep 1; done'
- 结果说明 :成功启动名为
testlog3的容器,使用默认日志驱动(syslog),并设置标签为testlog3,容器内执行循环脚本持续输出日志,日志通过 syslog 驱动发送至系统日志服务,验证了默认配置生效。
- 结果说明 :成功启动名为
2.3.4 检查容器采用的日志驱动
- 执行命令:
docker inspect testlog3 --format='容器采用的日志驱动:{``{.HostConfig.LogConfig.Type}}'

- 结果说明 :容器
testlog3采用的日志驱动为syslog,表明其日志已通过 syslog 驱动输出至系统日志服务,验证了 Docker 默认日志驱动配置成功生效。
2.3.5 查看日志文件内容
- 执行命令:
grep testlog3 /var/log/messages,查看日志文件/var/log/messages里包含testlog3的条目

3. 实战总结
- 本次实战系统验证了 Docker 日志驱动的两种典型使用场景:默认的
json-file驱动将日志以 JSON 格式保存在本地文件中,支持docker logs查看;而syslog驱动则将日志转发至系统日志服务(如 rsyslog),适用于集中日志管理。通过启用 rsyslog 的imuxsock模块,确保容器日志能正确写入/var/log/messages。最终,通过配置/etc/docker/daemon.json将默认日志驱动设为syslog,并验证新容器自动继承该配置。整个过程完整展示了从单容器日志定制到全局策略部署的运维实践,为生产环境日志规范化奠定了基础。