Pi-hole is one of the most effective ad-blockers available for you to use. You can install it on your router or a dedicated system and get an ad-free experience for all the devices connected through it.
In an earlier article, I discussed the steps for installing Pi-hole. But you must update it regularly to win the cat-and-mouse game between ad blockers and ad providers (Google, Facebook, etc). Another aspect is to patch a security vulnerability that might affect you negatively.
The update method depends on the installation method. To recall, I discussed two methods:
- Method 1: The existing Pi-hole installation was conducted using a script. The script was
curl -sSL https://install.pi-hole.net | bash(or something similar).
- Method 2: You installed Pi-hole using either Podman or Docker as a container.
I will cover how to update Pi-hole with both of these methods.
Method 1: Updating Pi-hole that was installed by a script
You will not believe how easy this is. All you have to do is run the following command in your terminal!
Of course, you have to run this command on the device where you have installed Pi-hole. In other words, you may have to SSH into your Raspberry Pi or router to run the above-mentioned command.
Doing so will update Pi-hole. Below is the output of running the
pihole -up command on my computer:
$ pihole -up [✓] Update local cache of available packages [i] Existing PHP installation detected : PHP version 8.1.2-1ubuntu2.8 [✓] Checking for git [✓] Checking for iproute2 [✓] Checking for dialog [✓] Checking for ca-certificates [i] Checking for updates... [i] Pi-hole Core: up to date [i] Web Interface: up to date [i] FTL: up to date [✓] Everything is up to date!
💡Though I haven’t encountered this myself, it is still a possibility that Pi-hole might require updates for other packages (like PHP) be installed. So try and run the update command that is applicable for your package manager on a regular basis. Keeping other packages up-to-date is just as important ;)
Optional: Automate Pi-hole update with cron job
This says that everything is up to date. But how can a normal person remember to keep everything up to date? Fret not! We can create a cron job to automatically update Pi-hole every day.
But before we edit the cron job, let us find the absolute path of the
pihole command. This can be done either using the
which command or the
command command. You only need to run either one of the two commands listed below:
command -v pihole which pihole
Executing either of the commands listed above will give you the absolute path to the
pihole command. In my case, the absolute path for the
pihole command is
Next, we will edit the cron job. To edit cron jobs, type the following command in your terminal (please do NOT use
Doing so will open a file in either the
nano editor or the
vim editor. Next, append the following lines to the currently opened file:
0 1 * * * /usr/local/bin/pihole -up
All you need to do now is to save and exit the editor.
What we just did was that we made updating Pi-hole an automatic task. This will automatically run the
pihole up command at 01:00 hours, every day.
Method 2: Update Pi-hole that was installed via Podman or Docker
If you installed Pi-hole using either Podman or Docker, all you can do initially is to pull the image.
⚠️ If you used a
docker-compose.yml file to create your container, please have it handy because we need to delete the current container and create a new one. (No data or configuration will be changed if volumes are backed up properly or if bind mounts were used.)
Step 1: Check if a newer image is available
To check for updates, you can run either of the following commands based on what you use:
# command for Podman users podman pull docker.io/pihole/pihole:latest # command for Docker users docker pull docker.io/pihole/pihole:latest
If there is a newer version of the image, it will be fetched. If a newer version is not available, nothing extra will happen and you should try again later.
Step 2: Stop and remove the container
If a new image was downloaded, we can proceed further. Our next step should be to restart the container. To know which container to restart, we can check the output of the
docker ps or
podman ps command.
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 73528d5ca4e8 docker.io/pihole/pihole:latest 14 hours ago Up 14 hours ago 53/tcp pihole-aditi
This shows that I have a container named
pihole-aditi. Let’s stop and remove this container. This can be done with the following commands:
# command for Podman users podman stop pihole-aditi docker rm pihole-aditi # command for Docker users docker stop pihole-aditi docker rm pihole-aditi
Step 4: Create a new container
I hope you took my warning seriously and have your
docker-compose.yml file handy ;)
Let’s re-create a new container. You can re-create your container using the following command:
docker-compose up -d
Please verify that the Pi-hole container is up and running using either the
podman ps command or the
docker ps command.
Step 5: Remove old image(s)
Once the Pi-hole container starts up with the updated image, we can remove the old image and free up disk, space.
To remove all the unused images, use the following command:
# command for Podman users podman image prune # command for Docker users docker image prune
Upon running the above command, all the unused images will be removed. Please take caution with this command.
Done! That was all that we needed to do to update our Pi-hole container.
This article goes over the two methods of updating Pi-hole based on the installation method initially used. I have also discussed setting up auto-updates for Pi-hole which was installed using the official script. There is no such option for the container method, unfortunately.
Do let me know if you face any issues.