Docker容器在Ubuntu上如何进行日志管理
导读:Docker 容器在 Ubuntu 上的日志管理 一 日志类型与查看入口 Docker 引擎日志:在 Ubuntu 16.04+ 由 systemd 管理,使用命令:sudo journalctl -u docker.service;如需...
Docker 容器在 Ubuntu 上的日志管理
一 日志类型与查看入口
- Docker 引擎日志:在 Ubuntu 16.04+ 由 systemd 管理,使用命令:
sudo journalctl -u docker.service;如需查看最近 100 条:sudo journalctl -u docker.service -n 100。早期 Ubuntu 14.04 可查看文件:/var/log/upstart/docker.log。 - 容器日志:默认由 json-file 驱动写入宿主机目录 /var/lib/docker/containers/<
容器ID>
/<
容器ID>
-json.log,不建议直接读取,优先使用
docker logs查看。 - 查看容器日志:
docker logs < 容器名或ID>;实时跟踪:docker logs -f < 容器名或ID>;使用 Docker Compose:docker-compose logs < 服务名>。 - 日志驱动与 docker logs 的关系:只有使用 local / json-file / journald 驱动时,
docker logs才能获取日志;使用 syslog / fluentd / none 等驱动时,docker logs不适用或为空。
二 日志轮转与大小限制
- 全局配置(推荐):编辑 /etc/docker/daemon.json,设置 json-file 的轮转参数并重启 Docker。示例:
应用更改:{ "log-driver": "json-file", "log-opts": { "max-size": "10m", "max-file": "3" } }sudo systemctl restart docker。该方式对所有新创建容器生效。 - 单容器配置:运行容器时指定日志选项,例如:
docker run -d --name myapp --log-driver json-file --log-opt max-size=10m --log-opt max-file=3 nginx。 - 注意事项:已存在的容器不会继承新的全局日志配置,需重建;若需彻底释放磁盘,可先停止容器,清空其日志文件(如
cat /dev/null > /var/lib/docker/containers/< id> /< id> -json.log),再启动。 - 非阻塞模式(避免阻塞应用):当日志产生过快时,可启用非阻塞传输并设置缓冲区,例如:
--log-opt mode=non-blocking --log-opt max-buffer-size=1MB(默认驱动需支持)。
三 日志驱动选择与集中化
- 常用驱动与用途:
- json-file:默认驱动,便于本地排查,配合轮转使用。
- journald:写入 systemd journal,与系统日志统一管理与检索。
- syslog:发送到 rsyslog/syslog-ng,便于接入现有 syslog 基础设施。
- fluentd / logstash:对接集中式日志平台(如 ELK/EFK),适合大规模与结构化场景。
- none:禁用容器日志。
- 配置示例:
- 使用 syslog 驱动:
应用:{ "log-driver": "syslog", "log-opts": { "syslog-address": "udp://localhost:514", "tag": "{ { .Name} } " } }sudo systemctl restart docker。 - 使用 journald 驱动:
应用:{ "log-driver": "journald" }sudo systemctl restart docker。 - 使用 fluentd 驱动:
docker run -d \ --log-driver=fluentd \ --log-opt fluentd-address=10.2.3.4:24224 \ --log-opt tag="docker.{ { .Name} } " \ your-image
- 使用 syslog 驱动:
四 生产实践与排障清单
- 应用日志应写到标准输出/错误:确保容器日志能被 Docker 捕获;如 nginx 将访问/错误日志链接到 /dev/stdout 与 /dev/stderr,便于
docker logs统一查看。 - 避免日志风暴:控制
print/debug输出;为驱动设置合理的 max-size / max-file;必要时启用 non-blocking 模式。 - 快速定位大日志来源:
- 查看容器日志驱动:
docker inspect --format='{ { .HostConfig.LogConfig.Type} } ' < 容器名>。 - 按大小排序容器日志目录:
du -d1 -h /var/lib/docker/containers | sort -h,定位异常容器后按上节方法处理。
- 查看容器日志驱动:
- 集中化与可视化:对接 ELK/EFK 或企业日志平台,实现检索、告警与可视化。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Docker容器在Ubuntu上如何进行日志管理
本文地址: https://pptw.com/jishu/749121.html
