PiHole on Docker

This article is my follow-up article to Up and running with RaspberryPi with Docker. In the previous article, I showed how you can configure docker and docker-compose on your RaspberryPi.

Let’s check how to restrict external traffic from your RaspberryPi with PiHole using docker and docker-compose.


The first step to defining a place where you want to install PiHole. In my case, I am going to keep it under the ~ path.

$ cd ~
$ mkdir pihole
$ cd pihole
$ touch docker-compose.yml

Once you create the docker-compose.yml file inside the pihole directory, add the following code into it.

$ nano docker-compose.yml
version: '3'

    container_name: pihole
    image: pihole/pihole:latest
      - '53:53/tcp'
      - '53:53/udp'
      - '67:67/udp'
      - '80:80/tcp'
      TZ: 'America/Chicago'
      WEBPASSWORD: 'strongPassword'
      - './etc-pihole/:/etc/pihole/'
      - './etc-dnsmasq.d/:/etc/dnsmasq.d/'
      - NET_ADMIN
    restart: unless-stopped

After saving the docker-compose.yml file, you can run the following command to bring your PiHole server up and running.

$ docker-compose up --detach

Initial run will take some time since it will download the PiHole image from docker.

After a successful run, you can check PiHole instance is running on RaspberryPi as a docker service.

# Try following commands to check PiHole service

$ docker ps
# To check the list of running containers

$ docker images
# To check PiHole image

If you have static IP defined configured in my previous article then you can access PiHole, at

Configure devices

After the installation of PiHole now we need to map other devices to use PiHole as the default gateway. For that, you can go to the network/Wifi settings of your individual devices and add IP address to the DNS list (should be on top). See the example below:

network setup

DNS settings on MAC

Thanks for following the tutorial, happy coding!

Buy me a coffee

View this page on GitHub