温馨提示×

Docker容器在Ubuntu上如何进行日志管理

小樊
39
2025-11-16 20:08:13
栏目: 智能运维

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 Composedocker-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
      
    选择建议:单机调试优先 json-file + 轮转;需要与系统日志统一用 journald;已有集中式平台用 fluentd/logstash

四 生产实践与排障清单

  • 应用日志应写到标准输出/错误:确保容器日志能被 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 或企业日志平台,实现检索、告警与可视化。

0