Running Pi-hole locally using Docker

I was at the office a couple of weeks back, browsed some of my favorite news sites, and was shocked by what I saw. Ads, ads everywhere!

At home, I’ve been running Pi-hole on my Synology NAS in a container for months now. I hardly see any (annoying) advertisements on any of my devices because of this.
Now don’t get me wrong, I don’t mind seeing a couple of relevant ads. The thing that annoys me, though, is ads causing content to jump around on the page. Those ads are one of the reasons I’m running Pi-hole.

Being a developer, I have Docker installed on my desktop. Because of this, I can run Pi-hole in a container on my development laptop and set this container up as my local DNS.
While this is a bit more work than installing your adblocker of choice in a browser, it is more fun.

Creating the Pi-hole container

The most important part of this post is the following docker-compose.yml file.
It will create a new container for you based on the latest pi-hole image available. Then, the necessary ports are forwarded to/from the container, and I’m using Cloudflare as my public DNS.
You might want to change the WEBPASSWORD to something else as pihole.

version: "3"
# 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:
      - "53:53/tcp"
      - "53:53/udp"
      - "67:67/udp"
      - "80:80/tcp"
    environment:
      TZ: 'Europe/Amsterdam'
      WEBPASSWORD: 'pihole'
      PIHOLE_DNS_: 1.1.1.1
    # Volumes store your data between container upgrades
    volumes:
      - './etc-pihole/:/etc/pihole/'
      - './etc-dnsmasq.d/:/etc/dnsmasq.d/'
    # Recommended but not required (DHCP needs NET_ADMIN)
    #   https://github.com/pi-hole/docker-pi-hole#note-on-capabilities
    # cap_add:
    #  - NET_ADMIN
    restart: unless-stopped

To start the container, run the following command in the folder containing the file: docker-compose up --detach.
After the container is booted, you can set up your DNS to 127.0.0.1, or navigate the administration panel http://localhost/admin/.

DNS Jumper

Setting the correct DNS in your network adapter(s) isn’t hard, but feels a lot like grunt work.
A tool I’ve been using is DNS Jumper. It makes switching the DNS a lot easier.
Safely install it using Chocolatey in an elevated prompt.

choco install dnsjumper

You are now able to switch DNS with a a couple of mouse clicks.


Share