> ## Content Index
> Fetch the complete content index at: https://itsfoss.com/llms.txt
> Use this file to discover other available public pages before exploring further.

# How to Update Pi-hole Easily
- URL: https://itsfoss.com/update-pi-hole/
- Published: 2022-12-21T09:58:00.000Z
- Updated: 2023-01-02T03:38:42.000Z
- Author: Pratham Patel
- Tags: Raspberry Pi

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](https://itsfoss.com/setup-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!

```
pihole -up
```

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](https://itsfoss.com/ssh-into-raspberry/) 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 `/usr/local/bin/pihole`.

Next, we will edit the [cron job](https://itsfoss.com/cron-job/). To edit cron jobs, type the following command in your terminal (please do **NOT** use `sudo`):

```
crontab -e
```

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.

## Conclusion

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.