Dozzle - dozzle.dev
Dozzle is a simple, lightweight application that provides you with a web based interface to monitor your Docker container logs live. It doesn’t store log information, it is for live monitoring of your container logs only.
- Intelligent fuzzy search for container names 🤖
- Search logs using regex 🔦
- Small memory footprint 🏎
- Split screen for viewing multiple logs
- Download logs easy
- Live stats with memory and CPU usage
- Authentication with username and password 🚨
While Dozzle should work for most, it is not meant to be a full logging solution. For enterprise applications, products like Loggly, Papertrail or Kibana are more suited.
Dozzle won't cost any money and aims to focus only on real-time logs.
Dozzle is a very small Docker container (4 MB compressed). Pull the latest release from the index:
$ docker pull amir20/dozzle:latest
The simplest way to use dozzle is to run the docker container. Also, mount the Docker Unix socket with --volume
to /var/run/docker.sock
:
$ docker run --name dozzle -d --volume=/var/run/docker.sock:/var/run/docker.sock -p 8888:8080 amir20/dozzle:latest
Dozzle will be available at http://localhost:8888/. You can change -p 8888:8080
to any port. For example, if you want to view dozzle over port 4040 then you would do -p 4040:8080
.
docker service create \
--name=dozzle \
--publish=8888:8080 \
--constraint=node.role==manager \
--mount=type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock \
amir20/dozzle:latest
version: "3"
services:
dozzle:
container_name: dozzle
image: amir20/dozzle:latest
volumes:
- /var/run/docker.sock:/var/run/docker.sock
ports:
- 9999:8080
You can control the device Dozzle binds to by passing --addr
parameter. For example,
$ docker run --volume=/var/run/docker.sock:/var/run/docker.sock -p 8888:1224 amir20/dozzle:latest --addr localhost:1224
will bind to localhost
on port 1224
. You can then use a reverse proxy to control who can see dozzle.
If you wish to restrict the containers shown you can pass the --filter
parameter. For example,
$ docker run --volume=/var/run/docker.sock:/var/run/docker.sock -p 8888:1224 amir20/dozzle:latest --filter name=foo
this would then only allow you to view containers with a name starting with "foo". You can use other filters like status
as well, please check the official docker command line docs for available filters.
Dozzle supports very simple authentication out of the box with username and password. You should deploy using SSL to keep the credentials safe.
Dozzle by default mounts to "/". If you want to control the base path you can use the --base
option. For example, if you want to mount at "/foobar",
then you can override by using --base /foobar
. See env variables below for using DOZZLE_BASE
to change this.
$ docker run --volume=/var/run/docker.sock:/var/run/docker.sock -p 8080:8080 amir20/dozzle:latest --base /foobar
Dozzle will be available at http://localhost:8080/foobar/.
Dozzle follows the 12-factor model. Configurations can use the CLI flags or enviroment variables. The table below outlines all supported options and their respective env vars.
Flag | Env Variable | Default |
---|---|---|
--addr |
DOZZLE_ADDR |
:8080 |
--base |
DOZZLE_BASE |
/ |
--level |
DOZZLE_LEVEL |
info |
n/a | DOCKER_API_VERSION |
not set |
--tailSize |
DOZZLE_TAILSIZE |
300 |
--filter |
DOZZLE_FILTER |
"" |
--username |
DOZZLE_USERNAME |
"" |
--password |
DOZZLE_PASSWORD |
"" |
--key |
DOZZLE_KEY |
"" |
Note: When using username and password DOZZLE_KEY
is required for session management.
I installed Dozzle, but logs are slow or they never load. Help!
Dozzle uses Server Sent Events (SSE) which connects to a server using a HTTP stream without closing the connection. If any proxy tries to buffer this connection, then Dozzle never receives the data and hangs forever waiting for the reverse proxy to flush the buffer. Since version 1.23.0
, Dozzle sends the X-Accel-Buffering: no
header which should stop reverse proxies buffering. However, some proxies may ignore this header. In those cases, you need to explicitly disable any buffering.
Below is an example with nginx and using proxy_pass
to disable buffering.
server {
...
location / {
proxy_pass http://<dozzle.container.ip.address>:8080;
}
location /api {
proxy_pass http://<dozzle.container.ip.address>:8080;
proxy_buffering off;
proxy_cache off;
}
}
What data does Dozzle collect?
Dozzle does not collect any metrics or analytics. Dozzle has a strict Content Security Policy which only allows the following policies:
- Allow connect to
api.github.com
to fetch most recent version. - Only allow
<script>
and<style>
files fromself
Dozzle opens all links with rel="noopener"
.
To Build and test locally:
- Install NodeJs.
- Install Go.
- Install reflex with
get -u github.com/cespare/reflex
outside of dozzle. - Install node modules with
yarn
. - Do
yarn dev