So, you don’t have a Raspberry Pi and since they are about as scarce as can be these days you can’t buy one, but you want to run PiHole without having to dedicate a piece of metal for it. What can you do?
Well, if you have a home server running Linux it’s no problem! Simply run it in a Docker container! I’ll show you how.
First of all, I’m writing this as if you have an Ubuntu Server machine, so you can follow along if you have a Debian-based distro, for those who have an RPM-based system, you can still use this guide, just know that the commands are different in your case.
First of all, let’s remove anything we might have installed from the default repos:
apt-get remove docker docker-engine docker.io containerd runc
Get our system ready for Docker:
apt-get install ca-certificates curl gnupg lsb-release
Let’s add Dockers GPG keys and their repo:
mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
Now let’s install Docker:
apt-get update apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin docker-compose
Now, since we’re using Ubuntu Server and it is using systemd, we have to free port 53 (which is used for DNS traffic) from systems. To do that we have to edit one file and modify it a bit.
nano -w /etc/systemd/resolved.conf
In that file, uncomment and change the following line so it looks like it does here:
DNSStubListener = no
Now we have to make one simple symlink and then reboot the server so that the settings in systemd take effect.
ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf reboot
After the reboot, we need to create a docker-compose.yml file where we want the PiHole Docker container to be created.
version: "3" services: pihole: container_name: pihole image: pihole/pihole:latest dns: - 127.0.0.1 - 18.104.22.168 ports: - "53:53/tcp" - "53:53/udp" - "80:80/tcp" environment: TZ: 'Reykjavik/Atlantic' WEBPASSWORD: 'CHANGEME!!' volumes: - './etc-pihole:/etc/pihole' - './etc-dnsmasq.d:/etc/dnsmasq.d' restart: unless-stopped
Now just run this command and we’re set!
docker-composer up -d
That’s it! Now you have a PiHole running on your local network! Congrats!