[Docker] Dozzle on Synology NAS
![[Docker] Dozzle on Synology NAS](/content/images/size/w1200/2025/09/dockerdozzle.jpg)
If you’ve ever managed multiple Docker containers, you know how painful it can be to check logs. You end up typing commands like:
docker logs -f container-name
… over and over again, jumping between containers just to see what’s going on.
That’s where Dozzle comes in. It’s a lightweight web application that lets you view container logs in real time, from your browser. No need to SSH into your NAS or run repetitive commands — just open a clean web UI and watch the logs stream in.
For me, this was a perfect fit for my Synology NAS setup.
Why Dozzle?
- Real-time logs: Watch your container logs update live in the browser.
- All containers in one place: Switch between containers with a dropdown.
- Lightweight: Tiny memory footprint, no database required.
- Web-based: Works on desktop and mobile.
It doesn’t try to be a full log management system like ELK or Loki — and that’s the beauty of it. Dozzle is simple, fast, and does exactly one thing well.
Folder Structure
I keep all my projects organized under /volume1/docker/
dozzle/. For Dozzle, the structure is simple:
/volume1/docker/dozzle/
├── docker-compose.yml
├── users.yml # authentication file
Reverse Proxy Setup
Instead of remembering port numbers, I set up a reverse proxy rule in Synology DSM:
https://logs.yourdomain.com → NAS-IP:9999
Steps:
- Go to Control Panel → Login Portal → Advanced → Reverse Proxy.
- Add a new rule:
- Source:
logs.yourdomain.com
(port 443, HTTPS). - Destination: NAS local IP, port
9999
.
- Source:
- Enable WebSocket support.
Now I can access Dozzle at a clean URL:
https://logs.yourdomain.com
User Authentication with users.yml
Dozzle no longer recommends using environment variables for authentication. Instead, you create a users.yml
file that defines accounts.
Example:
users:
your_own_id:
email: your_own_email
name: "Wody Lee"
password: "$2a$12$bFgHuFwvBNabQC5ZLU2lsuXhQpqWtDRYZGSKShmdRjqC2ZRIxPcE6" # password must be generated by bcrypt hash
filter:
🔐 How to generate the password hash
Instead of running shell commands, you can use an online generator such as bcrypt-generator.com.
- Open the site.
- Enter your desired password (e.g.,
mypassword
). - Choose Cost Factor = 12 (this means bcrypt rounds = 12, the recommended balance between security and speed).
- Click Generate.
- Copy the resulting hash (it will start with
$2y$12$...
).
Paste that hash into your users.yml
file.
Docker Compose File
Here’s my working docker-compose.yml
with users.yml
mounted:
services:
dozzle:
image: amir20/dozzle:latest
restart: on-failure:5
environment:
- DOZZLE_AUTH_PROVIDER=simple
secrets:
- source: users
target: /data/users.yml
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /volume1/docker/dozzle:/data:rw
ports:
- 9999:8080
First Login
Once the container is running, open:
https://logs.yourdomain.com
You’ll see a login prompt. Enter the username (admin
) and the plain password you chose before generating the hash (e.g., mypassword
).
Dozzle verifies it against the bcrypt hash in users.yml
. After login, the dashboard appears with a list of running containers.
Impressions
I love how lightweight Dozzle is. Adding authentication via users.yml
makes it secure enough to expose behind a reverse proxy, without worrying about anyone snooping on logs.
On my Synology NAS, where I run multiple services (Nextcloud, Matomo, FileBrowser, etc.), Dozzle saves me time and makes troubleshooting much easier.
Final Thoughts
If you want a simple, no-frills log viewer for Docker, Dozzle is the perfect tool. Adding a users.yml
file with bcrypt-protected credentials keeps it safe, and with Synology’s reverse proxy you get a clean, SSL-protected domain.
For me, Dozzle has become part of my essential toolkit — right alongside Portainer and Netdata.