Pi-hole's pitch is simple. A small self-hosted DNS server that blocks ads and trackers for every device on your network, with no per-device app or browser extension. I deployed it on a dedicated container to supplement my router's own DNS filtering. This is what that process actually looked like, including a router-level gotcha and a finding about container health checks that changed how I evaluate "is this working".
Pi-hole is a DNS server that answers most queries normally and returns a blocked response for domains on its blocklists. Mostly ad networks and trackers, from large, actively maintained community lists. Same style of list a browser extension like uBlock Origin uses, applied at the network's DNS layer instead of per-browser. Point your router's DHCP-assigned DNS server at it and every device on the network gets ad and tracker blocking with nothing installed. Phones, smart TVs and IoT devices that could never run a browser extension included.
Most consumer and prosumer routers with a content-filtering feature do something different, UniFi included. They do category-based filtering. Block "Adult Content", block "Malware", a fixed list of buckets. That is not general ad and tracker blocking. Three real differences matter:
They are not really competing products. A router's content filter aims at parental-control category blocking. Pi-hole aims at ad and tracker suppression with real visibility. Want both and you have to think about how they coexist, which turned out to be the first real decision point here.
Pi-hole's Docker image is genuinely easy to stand up. A single container. Host networking, so it binds DNS's standard ports directly. A web admin panel on the usual HTTP and HTTPS ports. No complex config to get it answering DNS queries correctly from its own local network segment. If the story ended there this would be a short, boring, entirely positive review.
Know this before you spend an hour debugging Pi-hole itself. Nothing about Pi-hole is broken in this scenario. It never sees the query. If clients on a UniFi or similar network are not resolving through Pi-hole despite correct DHCP and DNS settings, check whether the router's own DNS filtering is enabled on that segment first. Before you assume a Pi-hole-side misconfiguration.
If your router's content filtering already does real work, do not disable it as a side effect of adding Pi-hole. Parental controls on a specific network, for instance. Make that decision deliberately rather than stumbling into it. You have three options. Run Pi-hole only on the segments that do not depend on the router's filtering. Replace the router's filtering with something Pi-hole-based everywhere, which is more consistent and more work. Or hold off until you have decided. There is no universally correct answer. It depends on what the existing filtering is protecting.
Past the coexistence question above, I am holding off on redirecting network DNS to Pi-hole until some unrelated topology changes land. New switching hardware, some interfaces getting re-cabled. Pi-hole becomes a single point of failure for DNS on whatever segment it serves. I want that sitting on settled infrastructure, not infrastructure about to change out from under it. Nothing about the pause reflects on Pi-hole itself.
The lesson generalizes past Pi-hole. A container that is up, has not crashed, and throws no errors in its
logs can still be functionally broken. Only its own health check will tell you, if it has one and if you
look. docker ps showing a container as running is a much weaker claim than it feels like. Check
docker inspect for the health status, not just whether the process is alive.
Pi-hole's value proposition holds up on paper and in the parts I have tested directly. It does something a router's content filter does not, real ad and tracker blocking with real visibility. It is simple to deploy. It is light enough to justify a small dedicated container. This evaluation also turned up two real, non-obvious problems before it ever went live. A router that silently eats the exact traffic Pi-hole needs to see. A container that looked fine by every surface signal while its own health check said otherwise the entire time. Both are fixable. Neither is a knock against Pi-hole's design. They are exactly what "just deploy it and it'll work" advice skips. Full verdict once it carries real traffic, after the network topology work it is waiting on.