Back to home

How to Install Pi-hole on OpenMediaVault with Docker (Ad-Free Home Network Setup)

5 min read
Homelab

Want to block ads across your entire home network using your existing home server? In this guide, I’ll show you how to set up Pi-hole on OpenMediaVault using Docker, complete with router configuration and DNS optimization.

No need for a dedicated Raspberry Pi — if you're running OMV, this is the cleanest way to deploy Pi-hole with persistent storage and minimal host system interference.

✅ What You’ll Need

Before diving in, make sure you have:

  • OpenMediaVault installed
  • Docker and Docker Compose enabled (install via OMV plugins)
  • Basic command-line access (SSH or local terminal)

🚀 Why Use Pi-hole with Docker on OpenMediaVault?

Setting up Pi-hole inside Docker offers several benefits:

  • No extra hardware required
  • Keeps host system clean
  • Easily backup or migrate containers
  • Full network-wide ad blocking

However, Pi-hole requires a secure DNS setup, and that means using ports 53 and optionally 67, which can be tricky on host systems without careful configuration.

Luckily, Docker helps isolate that, and OMV makes managing it a breeze.

📝 Step-by-Step: Pi-hole Docker Compose for OMV

Here’s the official Pi-hole Docker Compose file, modified for OpenMediaVault use:

# More info at https://github.com/pi-hole/docker-pi-hole/ and https://docs.pi-hole.net/
services:
  pihole:
    container_name: pihole
    image: pihole/pihole:latest
    ports:
      # DNS Ports
      - "53:53/tcp"
      - "53:53/udp"
      - "8000:80/tcp"
      - "443:443/tcp"
      - "67:67/udp"
    environment:
      TZ: 'Asia/Singapore'
      FTLCONF_webserver_api_password: '<secure-password>'
      FTLCONF_dns_listeningMode: 'all'
    # Volumes store your data between container upgrades
    volumes:
      - '/path/on/host/etc-pihole:/etc/pihole'
    cap_add:
      - NET_ADMIN
      - SYS_TIME
      - SYS_NICE
    restart: unless-stopped

🔐 Important Notes:

  • Change port 8000:80 if OMV is using port 80.
  • FTLCONF_WEBSERVER_API_PASSWORD set your admin panel login password — use something strong.
  • Map host directories to /etc/pihole to retain settings and blocklists.

📂 Creating Docker Compose in OpenMediaVault

  1. Go to Services > Compose > Files
  2. Click Add, paste the Docker Compose above
  3. Click Up on your new Pi-hole stack to start it

🧱 Fix: Port 53 Already in Use on Host

You may hit an error like: listen udp 0.0.0.0:53: bind: address already in use

This means systemd-resolved is occupying port 53. To fix it:

🔧 Steps:

  1. Edit /etc/systemd/resolved.conf

  2. Change:

    #DNSStubListener=yes
    

    to:

    DNSStubListener=no
    

    (Remember to uncomment the line!)

  3. Save and run:

    sudo service systemd-resolved restart
    

Now Pi-hole should launch successfully.

🌐 Accessing Pi-hole Admin Panel

Open your browser and visit: http://<OMV-IP>:8000

Log in with the password you set in the Compose file.

📡 Configure Your Router to Use Pi-hole as DNS

To apply ad-blocking across your entire home network:

  1. Go to your router’s DHCP/DNS settings
  2. Set Primary DNS to your OMV server’s IP address

For my setup, I used a TP-Link Deco Mesh system and followed this Pi-hole TP-Link guide. They also have guides for other routers.

🧪 Testing If Pi-hole is Blocking Ads

Try visiting: https://www.cnn.com

If everything is working, you won’t see banner ads — they’ll be blocked at the DNS level before reaching your browser.

You can also view the Query Log in the Pi-hole dashboard to confirm real-time DNS activity and see what’s being blocked.

🧠 Final Thoughts

Deploying Pi-hole on OpenMediaVault using Docker is an efficient way to take back control of your internet. With a few configuration tweaks, you get:

  • ✅ Network-wide ad blocking
  • ✅ A secure, persistent DNS setup
  • ✅ No dependency on a separate device like a Raspberry Pi

If you’ve got a home server running OMV, this is one of the best self-hosted tools you can add. It’s low-maintenance, improves performance, and enhances privacy — all in one.