Dozzle 实时日志查看器:Docker 部署一站式容器日志监控
痛点:当你的容器超过 5 个以后
管理 Docker 容器最烦人的问题不是部署,而是排障时翻日志。
一开始还好,docker logs -f container_name 凑合用。但当你跑起 Gitea、Navidrome、Caddy、frp、Headscale……十几二十个容器后,场景变成这样:
- SSH 连上服务器 → 开四五个终端窗口
- 每个窗口跑一个
docker logs -f - 出问题时不知道哪个容器在报错
- 想翻历史日志?
docker logs --tail 1000→ 刷屏到眼花
更糟的是:没有搜索、没有过滤、没有时间线。 纯靠肉眼在一堆 ANSI 颜色字符里找错误。
Dozzle 就是来解决这个问题的。
什么是 Dozzle?

Dozzle 是一个实时 Docker 日志查看器,用 Go + Svelte 编写,MIT 协议。核心卖点就三句话:
轻量、实时、浏览器里看所有容器的日志。
截至 2026 年 6 月,Dozzle 拥有 13.4k GitHub Stars,每月都有更新,社区活跃度极高。
Dozzle vs 传统日志查看方式
| 特性 | Dozzle | docker logs | Portainer | Loki + Grafana |
|---|---|---|---|---|
| 部署复杂度 | 1 行命令 | 内置 | 中等 | 高 |
| Docker 镜像大小 | 7MB | 内置 | ~150MB | Loki ~200MB |
| 实时日志 | ✅ WebSocket | ✅ 终端 | ✅ | 延迟 30~60s |
| Web 界面 | ✅ | ❌ 需终端 | ✅ | ✅ |
| 多容器集中查看 | ✅ | ❌ 一个窗口一个 | ✅ | ✅ |
| 日志搜索过滤 | ✅ | ❌ grep 手动 | ❌ | ✅ LogQL |
| 暗色/亮色主题 | ✅ | ❌ | ✅ | ✅ |
| 多主机监控 | ✅ Pro | ❌ | ❌ | ✅ |
| 历史日志持久化 | ❌ 仅实时 | ✅ 看宿主机 | ❌ | ✅ |
| 内存占用 | ~15MB | 0 (系统进程) | ~200MB | ~500MB+ |
Dozzle 的定位非常明确:它不是 Loki 那样的日志中心,而是给日常排障用的实时日志仪表盘。你不需要学 LogQL、不需要搭 Elastic Stack,打开浏览器就能看到所有容器在打印什么。
Docker 部署 Dozzle
环境要求
- Docker Engine ≥ 20.10
- 需要访问 Docker Socket(
/var/run/docker.sock) - 任意 Linux 服务器,512MB 内存绰绰有余
快速部署
最简部署方式——单行命令:
docker run -d \ --name dozzle \ -p 8080:8080 \ -v /var/run/docker.sock:/var/run/docker.sock \ amir20/dozzle:latest打开 http://你的IP:8080,自动显示所有容器的日志流。
用 Docker Compose 部署(推荐)
version: '3.8'
services: dozzle: image: amir20/dozzle:latest container_name: dozzle ports: - "8080:8080" volumes: - /var/run/docker.sock:/var/run/docker.sock restart: unless-stopped启动:
docker compose up -d配置 HTTPS 访问
用 Caddy 反代:
logs.yourdomain.com { reverse_proxy 127.0.0.1:8080}用 Nginx Proxy Manager:
- 添加 Proxy Host →
logs.yourdomain.com - 转发到
127.0.0.1:8080 - 开启 SSL 证书
进阶配置
1. 限制可访问的容器
默认 Dozzle 显示所有运行中的容器。如果想限制只显示某些容器,用 --filter 参数:
services: dozzle: image: amir20/dozzle:latest command: --filter name=gitea --filter name=navidrome --filter name=caddy # 其他配置不变2. 设置用户名密码(Dozzle Pro)
Dozzle Pro 提供付费的身份验证功能。基本用法:
services: dozzle: image: amir20/dozzle:latest environment: - DOZZLE_AUTH_USERNAME=admin - DOZZLE_AUTH_PASSWORD=your_secure_password volumes: - /var/run/docker.sock:/var/run/docker.sock3. 配置自动刷新间隔
services: dozzle: image: amir20/dozzle:latest command: --interval 500 # 默认 300ms,改为 500ms 减少 CPU 开销4. 配合反向代理的基础认证
用 Caddy 自带的 basicauth:
logs.yourdomain.com { basicauth { admin $2a$14$xxxxxx # 用 caddy hash-password 生成 } reverse_proxy 127.0.0.1:8080}日常使用技巧
快速排障流程
- 打开 Dozzle 的 Web 界面
- 选择疑似出问题的容器
- 在搜索框输入
error/panic/exception/failed - 时间戳旁边直接跳转到出错时刻
多窗口对比
用浏览器的多个标签页打开 Dozzle,每个标签页看不同容器的日志流,排障效率翻倍。
手机端查看
Dozzle 的 Web 界面响应式适配,手机浏览器也能用。在 Caddy/NPM 上配好 HTTPS,出门在外也能随时查看服务状态。
常见问题 FAQ
Q1: Dozzle 会保存历史日志吗?
不会。Dozzle 是实时日志查看器,显示的是容器当前的 stdout/stderr 流。要查看历史日志,需要 Docker 的日志驱动配置了持久化(如 json-file 或 journald),Dozzle 会读取它们。
如果需要长期存储和检索日志,建议搭配 Loki + Grafana 使用。
Q2: Dozzle 占用多少资源?
实测:展示 15 个容器的日志流时,CPU 占用约 1~3%,内存占用约 15MB。相比 Portainer(~200MB)和 Grafana(~100MB),Dozzle 几乎可以忽略不计。
Q3: 能不能看 swarm 或 k8s 的日志?
Dozzle 主要面向单机 Docker 环境。Dozzle Pro 提供了多主机支持,但 Kubernetes 不在支持范围内。K8s 环境推荐使用 kubectl logs 或 Loki。
Q4: 和 Portainer 的日志功能比怎么样?
Portainer 也带日志查看功能,但体验上有明显差距:
| 对比项 | Dozzle | Portainer 日志 |
|---|---|---|
| 实时性 | WebSocket 近乎零延迟 | 刷新有延迟 |
| 搜索 | 即时过滤 | 不支持按关键字搜索 |
| 界面性能 | 15 个容器流畅 | 容器多了卡顿 |
| 部署侵入性 | 仅需挂载 Docker Socket | 需要完整 Portainer 栈 |
Q5: 可以设置日志保留策略吗?
Dozzle 本身不做日志存储,所以没有保留策略。日志的保留由 Docker 的日志驱动决定:
# 限制每个容器最多保留 100MB 日志,最多 10 个文件docker run -d --log-opt max-size=10m --log-opt max-file=10 ...或者在 daemon.json 中全局配置:
{ "log-driver": "json-file", "log-opts": { "max-size": "10m", "max-file": "10" }}总结
Dozzle 是 Docker 日常排障的神器。它不解决「日志归档分析」的问题——那是 Loki 和 ELK 的事——但它完美解决了**「我现在就想看容器在打印什么」**这个日常最高频的需求。
7MB 的镜像大小、一条命令的部署、零配置的界面,让它成为任何 Docker 用户都应该装的工具。如果你的服务器上跑着超过 5 个容器,装一个 Dozzle,排障效率至少翻一倍。
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!