插件窝 干货文章 Docker的系统日志在哪里?

Docker的系统日志在哪里?

Docker 日志 Container 查看 49    来源:    2025-04-29

在 Docker 中,系统日志的存储位置和查看方式取决于日志驱动(Logging Driver)的配置以及操作系统类型。以下是详细说明:


1. Docker 守护进程日志(Docker Daemon Logs)

作用:记录 Docker 服务本身的运行状态(如启动、停止、错误等)。

Linux 系统

  • 使用 systemd 的系统(如 Ubuntu 16.04+/CentOS 7+):

    journalctl -u docker.service  # 查看完整日志
    journalctl -u docker.service --since "2023-01-01" --no-pager  # 按时间过滤
    
    • 日志默认由 systemd-journald 管理,存储路径为 /var/log/journal/
  • systemd 的系统(如旧版 Debian):

    cat /var/log/upstart/docker.log
    

Windows 系统

  • 通过事件查看器(Event Viewer)查看:
    • 路径:应用程序和服务日志 -> Docker -> Windows

macOS(Docker Desktop)

  • 通过 GUI 查看:
    • 点击菜单栏 Docker 图标 -> Troubleshoot -> View logs
  • 命令行查看: bash cat ~/Library/Containers/com.docker.docker/Data/log/vm/dockerd.log

2. 容器日志(Container Logs)

作用:记录单个容器的标准输出(STDOUT/STDERR)。

默认日志驱动(json-file

  • 日志路径

    /var/lib/docker/containers/<container_id>/<container_id>-json.log
    
    • <container_id> 可通过 docker ps -a 获取。
  • 查看日志命令

    docker logs <container_name_or_id>          # 查看实时日志
    docker logs --tail 100 <container_id>      # 查看最后100行
    docker logs -f <container_id>              # 跟踪日志(类似 tail -f)
    

其他日志驱动

如果配置了其他日志驱动(如 syslogjournaldfluentd 等),日志位置会变化: - syslog:日志发送到系统 syslog(通常为 /var/log/syslog/var/log/messages)。 - journald:使用 journalctl -u docker 查看。 - awslogs/gcplogs:日志发送到云服务商平台。

检查当前容器的日志驱动

docker inspect -f '{{.HostConfig.LogConfig.Type}}' <container_id>

3. 配置 Docker 日志

全局日志驱动配置

修改 /etc/docker/daemon.json(Linux/macOS)或 Docker Desktop 设置(Windows):

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}
  • max-size:单个日志文件大小限制。
  • max-file:保留的日志文件数量。

重启 Docker 生效:

sudo systemctl restart docker

容器级别日志驱动

启动容器时指定参数:

docker run --log-driver json-file --log-opt max-size=10m nginx

4. 清理 Docker 日志

  • 手动删除日志文件bash sudo truncate -s 0 /var/lib/docker/containers/*/*-json.log
  • 自动日志轮转:通过 logrotate 配置(Linux)。

常见问题

  1. 日志文件过大

    • 调整 max-sizemax-file 限制。
    • 避免将应用程序日志直接输出到容器控制台(建议写入文件并挂载卷)。
  2. 日志驱动不生效

    • 确保 daemon.json 语法正确,且重启了 Docker。
  3. 日志丢失

    • 如果使用 journald,检查 journald 的存储限制(/etc/systemd/journald.conf)。

通过以上方法,你可以快速定位和管理 Docker 的系统日志及容器日志。如果需要更复杂的日志管理,建议结合 ELK(Elasticsearch+Logstash+Kibana)或 Grafana Loki 等工具。