I use Docker to self-host many apps, including full-fledged PDF suites like Stirling PDF, Nextcloud as my cloud storage solution, and a great alternative to conventional virtual machines. However, I feel like I haven’t even scratched the surface when it comes to the sheer number of quality Docker containers out there.
Last weekend, I went down the rabbit hole testing a few Docker containers that I think you should try this weekend if you are new to Docker and use it for a home setup.
Tailscale
A private mesh VPN that connects all your devices
Tailscale is a mesh VPN built on WireGuard that lets you access your self-hosted services from anywhere. I had been running a few Docker containers at home, but they were only reachable while I was on my home Wi-Fi. Port forwarding was an option, but it’s rather risky and unnecessarily complicated.
The Tailscale Docker container is an easy fix. Once deployed, it joins your private tailnet and makes every device on it reachable, regardless of where they physically sit. I can now access my self-hosted services from a coffee shop or from my phone on a mobile hotspot, without configuring a single port-forwarding rule.
It also plays nicely with other Docker containers. Using network_mode: service:tailscale, you can attach any container to Tailscale’s network namespace. So instead of exposing a web app on a local port, it becomes available at a clean Tailscale hostname, complete with a Let’s Encrypt certificate if you enable Tailscale Serve. The free tier supports up to 100 devices, which is more than enough for any home setup.
AdGuard Home
Network-wide ad and tracker blocking via DNS
If you’ve ever wished you could block ads on every device in your house without installing anything on each one, AdGuard Home is worth a look. It’s a free, open-source DNS server that filters ads and trackers at the network level. Point your router’s DNS settings to the container’s IP, and every device on your network, from your phone to your smart TV, starts getting filtered DNS.
I had used Pi-hole before, and it worked fine. But AdGuard Home offers a few things Pi-hole doesn’t include out of the box. The biggest one for me is built-in support for encrypted DNS. By default, your DNS queries travel in plain text, which means your ISP can see every domain you look up. AdGuard Home supports DNS-over-HTTPS (DoH) and DNS-over-TLS (DoT) natively, so those queries stay private without needing additional tools.
The other feature that you’ll appreciate is per-client configuration. You can set different filtering rules for different devices on your network. For example, I have stricter filtering on the TV in the living room, while my workstation uses a lighter set of rules. AdGuard Home also has preconfigured category blocking for things like gambling and social media, which makes it practical for parental controls without fiddling with individual domains.
Paperless-ngx
Digitize and search all your paper documents
I have a drawer full of receipts, bills, and letters that I keep telling myself I’ll organize someday. Paperless-ngx turned out to be just the solution I needed to clean up the paper mess. It’s an open-source document management system that runs OCR on your scanned or uploaded documents and turns them into searchable text.
The setup involves three containers: Paperless-ngx itself, a PostgreSQL database, and Redis for background task queuing. That sounds like a lot, but once the Docker Compose file is configured, the containers handle everything together. Drop a scanned receipt into the consume folder, and Paperless picks it up, runs OCR, and files it. You can also upload documents directly through the web UI.
You can also map the consume folder as a network drive, so any device on your network, or through Tailscale if you’ve set it up, can drop files into Paperless directly from the file manager.
Uptime Kuma
A self-hosted status monitor for all your services
Once you have a few Docker containers running, the next question is: how do I know if something went down? Uptime Kuma is the answer. It monitors your services and notifies you the moment something stops responding.
Setting it up is one of the simplest Docker deployments I’ve done. A single container, one compose file, and it’s live on port 3001. The key detail is mounting the Docker socket as a volume, which lets Uptime Kuma detect and monitor other containers by name. That means you don’t have to track IP addresses and ports for everything. Just type the container name, and it starts watching.
Each monitor has a retries setting that prevents false alarms from brief hiccups. I set it to 0 for critical internal services like my private cloud and other Docker containers that I self-host on an older desktop, and 2-3 for anything public-facing that might occasionally drop a single check. Notifications can route through many services. I have mine going to a push notification on my phone, so I know within minutes if something breaks.
Do keep in mind that Uptime Kuma is itself a single point of failure. If the machine it runs on goes down, you won’t get alerts about anything else going down with it. For a home setup, that’s a reasonable trade-off. For anything production-critical, you’d need a second instance running somewhere else.
Syncthing
Peer-to-peer file sync without the cloud
I’ve used Nextcloud as a hybrid cloud storage setup before, and it works well once configured. But for straight file sync between two devices, it’s overkill. Syncthing keeps folders in sync across devices, peer-to-peer, with no cloud in between.
Running it in Docker makes sense because it stays isolated and portable across different hardware. I have it running on two machines using the linuxserver.io Docker image, with each container pointing to a config folder and a my files folder mounted from the host. The web UI loads on port 8384, where you link devices by exchanging device IDs and then share specific folders between them.
The sync is genuinely two-way, and there’s no central server deciding what the “correct” version is. This peer-to-peer method also means your files never pass through a third-party server, which is a privacy win over cloud-based sync services.
If you plan to set it up, on some NAS setups, you’ll need to make sure the container’s user has full permissions on the shared folder. Skipping that step results in “permission denied” errors that are easy to overlook during the initial setup.
Self-hosting is a rabbit hole worth falling into
Almost all these Docker containers offer a solution to the problems that I had since I started self-hosting. While some are easy to set up, others may need a bit of technical know-how to install. AdGuard Home, Syncthing, and Tailscale are probably my top three recommendations, as they can be useful in any home setup, and once you have a few of them running, Uptime Kuma will find its place as well.