Skip to content

Pi-hole in Docker on a Synology NAS

UpdateDate
New guide released20/09/2021
Fixed a typo in the Environment Variables and added note around DHCP25/11/2021
Additional environment variable added to fix a start-up error due to changes in the 2022.01 release and onward of PiHole.14/01/2022
Environment Variables updated to the latest requirements – Now runs as your locally created docker user rather than root07/04/2022
Updated screenshots and steps for DSM7.111/06/2022
Updated with new Docker Network settings23/07/2022


What is Pi-hole?

If you are looking to get advertising and tracking blocked across all the devices on your network a Pi-hole will have you covered. It’s a locally hosted Domain Name Server and uses block lists to stop adverts.

Let’s Begin

Couple of things to note and common questions:

  • Pi-hole is not able to block YouTube ads
  • You will need to change the DNS settings either on your Router or whatever device is managing your DHCP/DNS settings
  • You will not be able to use this in conjunction with the DHCP server built into DSM if you have that enabled you will need to turn it off before continuing.

In order for you to successfully use this guide please complete these two steps first.

Downloading the Pi-hole Image

Open up Docker within DSM and navigate to the ‘Registry’ section and search for ‘pihole’ in the search box. Download the official version.

The pop-up box will ask which version you want to download, make sure you choose ‘Latest’ from the list of available versions.

You can check the status of the download over on the ‘Image’ tab.

Setting up the container

In Docker click on the ‘Image’ tab, in the list of your containers select the ‘PiHole’ image and click on ‘Launch’

The first screen will ask how you want to set up the Docker network, to keep things simple we will be using the Docker Host option which means we will not need to set up any additional ports. Click Next once you have selected the option.

General Settings

Next you will be greeted with the General Settings screen, this is where you can start specifying some of your preferences.

You can change the name of the container to anything you like, and you may want to enable Auto Restart as this will ensure Radarr starts automatically if you reboot your NAS.

You will also notice a Configure capabilities button — don’t change anything in here!

Keep in mind if you turn off your Diskstation or stop the container you will lose internet access as there will be no way for devices to resolve DNS queries.

Next up we are going to click on the ‘Advanced Settings’ button, this will take you to a new window with a number of tabs which we are going to work through.

Environment

Next we are going to set up a some environment variables that docker will use to allow the container to access our local file system by telling it the IDs to use for file permissions

For each of the items in the table below you will need to click on ‘Add’ button then type each of the below in the ‘variable’ and ‘value’ sections.

VariableValue
PIHOLE_UIDThe UID you obtained in the user setup guide
PIHOLE_GIDThe GID you obtained in the user setup guide
WEB_UIDThe UID you obtained in the user setup guide
WEB_GIDThe GID you obtained in the user setup guide
TZYour timezone wikipedia.org/wiki/List_of_tz_database_time_zones
WEBPASSWORDA password of your choice for the Pi-hole web interface
DNSMASQ_USERpihole
DNSMASQ_LISTENINGlocal
WEB_PORT8000

Once you have entered the above scroll down the Environment Variable as you will be able to see one called ServerIP you need to enter the IP address of your NAS e.g. 192.168.0.46

VariableValue
ServerIPEnter the IP of you NAS

You do not need to set up anything on these tabs.

Press ‘Save’ to go back to the initial setup screen, then press ‘Next’

Port Settings

We just need to amend one of the container ports as by default PiHole uses port 80 for the Web Interface. Amend this to 8000 the others you can copy from the right side of the settings page ‘Container Port’ onto the left side ‘Local Port’ once you have done this press ‘Next’.

Volume Settings

We will now be specifying the directories where Pi-hole will store its configuration files.

We first click on ‘Add folder’ so we can create some folders for the config files to live, first create one called ‘pihole’ inside your /docker share.

Then within that folder create two new folders called ‘dnsmasq.d’ and ‘pihole’

You will now add each of these folders in line with the table / screenshot below

File/FolderMount Path
/docker/pihole/dnsmasq.d/etc/dnsmasq.d
/docker/pihole/pihole/etc/pihole

Click Next to move to the final screen.

Summary

You have now completed the container setup.

You will be shown an overall summary of the settings we have specified, this is a good time to double-check everything is correct. Finally, click on Done and the container should start to boot.

After about 30 seconds or so you should then be able to access the Pi-hole web interface via you NAS IP followed by port 8000, and log in with the password you set earlier.

e.g. 192.168.0.46:8000

You will now need to add the IP address of your NAS as your DNS address in your router or other DHCP server. It can take some time for all of your devices to move over the new DNS settings so be patient, and you will gradually start to see your stats begin to start.

Also note as we are not using Pi-hole as the DHCP server you will not be able to see the names of the devices in the statistics just their IP addresses.

That’s it!

Docker Compose

You can use the below code saved as pihole.yml in the ‘/docker/pihole’ share, this will do the entire process above in one quick command via SSH. Ensure you change the variables to your own. You will need to set up the correct sub-folders as per the section in the guide above.

version: "3.8"
services:
  pihole:
    image: pihole/pihole:latest
    container_name: pihole
    environment:
      - PIHOLE_UID=YOURUID
      - PIHOLE_GID=YOURGID
      - WEB_UID=YOURUID
      - WEB_GID=YOURGID
      - TZ=YOURTIMEZONE
      - WEBPASSWORD=YOURPASSWORD
      - DNSMASQ_LISTENING=local
      - WEB_PORT=8000
      - ServerIP=YOURNASIP
      - DNSMASQ_USER=pihole
    volumes:
      - /volume1/docker/pihole/dnsmasq.d:/etc/dnsmasq.d
      - /volume1/docker/pihole/pihole:/etc/pihole
    ports:
      - 53:53/tcp
      - 53:53/udp
      - 67:67
      - 8000:80
    network_mode: synobridge
    restart: unless-stopped
sudo docker-compose -f /volume1/docker/pihole/pihole.yml up -d


Throw me some bits or buy me a coffee?

If you have found my site useful please consider pinging me a tip as it helps cover the cost of running the site, you can even buy me a coffee 🙂

Buy Me A Coffee
Doge / Ethereum / Bitcoin
Published inDockerSynology

25 Comments

  1. Hamon Hamon

    PGID The UID you obtained in the user setup guide
    PUID The GID you obtained in the user setup guide

    You put PGID for UID and PUID for GID, just a type-o i think

    to find out PGID and PUID look this one: https://kb.iu.edu/d/adwf

    Thanks man I have pihole now… nice

    • Dr_Frankenstein Dr_Frankenstein

      Good spot, will get that amended.

  2. ChzPlz ChzPlz

    Hi – any reason why we couldn’t enable pihole’s DHCP server?

    • Dr_Frankenstein Dr_Frankenstein

      Hey, you should be able to use the pi DHCP it’s just you can’t use the one in DSM as the pi uses the port.

  3. Steven Whittaker Steven Whittaker

    is the variable DSNMASQ_LISTENING supposed to read DNSMASQ_LISTENING?

    • Dr_Frankenstein Dr_Frankenstein

      Yes, hadn’t spotted the typo fixed it now

  4. Unknown Unknown

    Hi there,

    I’ve used your tutorial and want to add one helpful tips:
    I’ve had the package DNS-Server installed, which I had to uninstall, else the pihole was stuck in a restart-loop.

    One question:
    How do I update pihole – just reset the container or is there anything to do with the image?

    Thanks

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

drfrankenstein.co.uk – writing Synology Docker Guides since 2016 – Join My Discord!