Since I have switched to mainly running home lab services to Docker, I have been trying different tools to monitor Docker in a way that I want it to be monitored. I hadn’t really been completely happy with the tools I have tried so far in the depth of monitoring they give. However, I tried Zabbix again after not having tried it in a while, and I think Zabbix Docker home lab monitoring has won me over due to the rich graphs, alerting, and visibility it gives.
What Zabbix is and why it is perfect for the home lab
Zabbix is a completely free and open source monitoring tool that can monitor just about anything, including Docker. It supports agent-based and agentless monitoring. You can monitor things like SNMP, IPMI, HTTP, and it also has native built-in support for Docker container monitoring.
It also gives you a historical view of your data and monitoring along with graphs and dashboards that can help you visualize what the data is telling you. As far as alerting, you can send alerts through email, Telegram, Slack, or other alerting platforms. It has a huge number of alerting platforms to choose from as we will see.
You can monitor your Proxmox hosts, Linux Docker hosts, Docker containers, NAS devices, network flows, and other things. It is also fairly lightweight and easy to deploy using Docker. Another thing I like about Zabbix when it comes to home lab and production environments is that it has monitoring templates that let you have preconfigured settings you can apply to hosts that you want to monitor in Zabbix.
These templates automatically give Zabbix the intelligence to monitor whatever platform or stack that you are adding to your Zabbix server. It also has strong integrations meaning you can tie in various other vendor technologies or monitor these with Zabbix.
Zabbix GitHub: zabbix/zabbix: Real-time monitoring.
Installing Zabbix with Docker
The simplest way to get started is to deploy Zabbix using Docker Compose. This method allows you to define all components, including the Zabbix server, web interface, and database, in a single YAML file.
You’ll need Docker and Docker Compose installed on your host. Once that’s in place, create a new directory for your Zabbix setup and add a file named docker-compose.yml with the contents below but modified for your environment. I left my bind mount in place to see how that can be done.
services:
mysql-server:
image: mysql:8.0
container_name: zabbix-mysql
restart: unless-stopped
environment:
MYSQL_DATABASE: zabbix
MYSQL_USER: zabbix
MYSQL_PASSWORD: zabbix_password
MYSQL_ROOT_PASSWORD: root_password
volumes:
- /home/linuxadmin/homelabservices/zabbix/mysql:/var/lib/mysql
command:
- mysqld
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_bin
zabbix-server:
image: zabbix/zabbix-server-mysql:latest
container_name: zabbix-server
restart: unless-stopped
environment:
DB_SERVER_HOST: mysql-server
MYSQL_DATABASE: zabbix
MYSQL_USER: zabbix
MYSQL_PASSWORD: zabbix_password
MYSQL_ROOT_PASSWORD: root_password
ports:
- "10051:10051"
volumes:
- /home/linuxadmin/homelabservices/zabbix/server:/var/lib/zabbix
depends_on:
- mysql-server
zabbix-web:
image: zabbix/zabbix-web-nginx-mysql:latest
container_name: zabbix-web
restart: unless-stopped
environment:
DB_SERVER_HOST: mysql-server
MYSQL_DATABASE: zabbix
MYSQL_USER: zabbix
MYSQL_PASSWORD: zabbix_password
ZBX_SERVER_HOST: zabbix-server
PHP_TZ: America/Chicago
ports:
- "8080:8080"
depends_on:
- mysql-server
- zabbix-server
Save the file, then run the following command from the same directory:
docker compose up -d
Docker will download the images and create the containers. This will start your Zabbix environment. I like to run a docker compose ps and make sure the services are in a healthy state.
http://<your-server-ip>:8080
You should see the Zabbix web interface. The default login credentials are:
- Username: Admin
- Password: zabbix
After you get logged in, you will land at the Zabbix dashboard. There it displays system information and quick overview of the Zabbix environment. At this point you can start adding your monitored hosts and start getting metrics.
My Zabbix configuration overview
So just for the purposes of this post, let me give you an overview of how I have things configured. First I have an Ubuntu Server that is serving as my Docker host and where I am running the Zabbix Docker containers.
So, even though Zabbix is running on a specific Linux host as a container, it doesn’t just automatically start monitoring the host where it is running. If you run Zabbix as an installed package in Ubuntu, it would work that way, but not as a container.
So, I also installed the Zabbix agent 2 package which I will show in the next section. We will then add the Docker host itself as a monitored host in Zabbix.
How I added my Docker host to Zabbix for monitoring
The easiest way to Zabbix Docker home lab monitoring is to install the Zabbix agent 2 installation on the server.
Zabbix can monitor Docker hosts and containers using its modern Agent2, which supports container metrics natively. To set this up, you’ll deploy a Zabbix Agent2 container on the host that’s running your other containers.
Here’s an example that is directly from the official Zabbix Agent 2 installation documentation for Ubuntu 24.04 which you can look at here: Zabbix Ubuntu 24.04 install instructions. I have added the line below to add the zabbix user to the docker group as well so the Zabbix user has permissions to the Docker socket.
# Install the Zabbix repository
wget https://repo.zabbix.com/zabbix/7.4/release/ubuntu/pool/main/z/zabbix-release/zabbix-release_latest_7.4+ubuntu24.04_all.deb
sudo dpkg -i zabbix-release_latest_7.4+ubuntu24.04_all.deb
sudo apt update
# Now install the agent
sudo apt install zabbix-agent2 -y
# Add zabbix user to docker group
sudo usermod -aG docker zabbix
# Restart agent
sudo systemctl restart zabbix-agent2
sudo systemctl enable zabbix-agent2
The key here is the Docker socket mount. The Zabbix Agent2 container can use /var/run/docker.sock to read container metadata and statistics from the Docker daemon. Once this agent is running, it will automatically send metrics to the Zabbix server container you deployed earlier.
Configure the agent configuration file
# Edit the config file
sudo nano /etc/zabbix/zabbix_agent2.conf
I changed the following values to allow the Zabbix server to interact with the agent configuration. Note the following:
- Server – This is a list of comma delimited IP addresses or DNS names of Zabbix servers
- ServerActive – Zabbix server/proxy address or cluster configuration to get active checks from
- Hostname – List of comma delimited unique case sensitive hostnames (not network hostnames, but Zabbix hostnames)
Server=10.1.149.31,172.19.0.0/16
ServerActive=10.1.149.31
Hostname=cldockertest3
After you have modified the agent configuration, you will need to restart the zabbix agent to pick up the new configuration.
# After edit
sudo systemctl restart zabbix-agent2
sudo systemctl status zabbix-agent2
Add the monitor host in Zabbix dashboard
Navigate to Monitoring > hosts > Create host. Here is how I entered in the information in my Zabbix server to monitor the host once it was configuration. Enter the Host name as you have it in the configuration file. Then notice the Template I have added the Docker by Zabbix agent 2 template which is included in the box.

Troubleshooting connectivity between agent and Zabbix server
After you point your agent configuration file to the Zabbix server and restart the agent, it is a good idea to tail the logs for the agent to make sure everything looks good.
sudo tail -30 /var/log/zabbix/zabbix_agent2.log
With this you can see potential issues as you can see in the output from the log below. You can see below, since the Zabbix server was running inside a Docker container on the same host, I needed to add the Docker IP range.
Below is an example of a mismatch between the configuration file and what is configured in the Zabbix host monitoring configuration. These names must match exactly.
Looking at container metrics and graphs
In a few minutes, you should start seeing data populate in the Latest data section. Zabbix will automatically discover containers that are running and start collecting metrics like:
- Container name and image
- CPU usage per container
- Memory and swap utilization
- Container uptime
- Network I/O statistics
- Number of restarts
This built-in Docker template makes the setup of what’s monitored very easy. It uses discovery rules to detect new containers automatically.
Once data begins flowing in, the fun part starts. Navigate to Monitoring > Hosts and select your Docker host. Under the Graphs tab. Here is where you will find detailed graphs of your containers’ performance data and metrics.
You can track CPU utilization across all containers, see which ones are using the most memory, or analyze network traffic over time. The real power comes when you build custom dashboards.
Creating a custom dashboard
One of the features that won me over is the ability to create custom dashboards. This allows you to have different views of different containers that you want to group together or view metrics for at the same time. To create a custom dashboard, take a look at the following steps:
Go to Dashboards > “hamburger menu top right” > and click Create new. Give it the name you want to assign, add widgets that you want to add and save the dashboard.

Configuring alerts and triggers
Monitoring is only useful if it can notify you when something goes wrong. Zabbix Docker home lab monitoring uses triggers to define alert conditions. For example, you can set an alert when container memory usage exceeds 80 percent or when a container stops running. Zabbix has one of the highest number of notification endpoints out of the box that I have seen.
First of all, we need to configure an alert destination which is where a triggered alert gets sent. Zabbix refers to these in a bit of an odd way, calling them media types. To configure your media types, navigate to Alerts > Media types. Then you can click on the “Disabled” status that is default and it will set it to enabled. Click the link for the Media Type (its name) and it will open the configuration for it. For instance, traditional email configuration dialog below:
To say that Zabbix has A LOT of notification possibilities is an understatement. There are literally 40 or so different types of messaging services you can target.
Triggers
To create a trigger, you can navigate to the Monitoring > Hosts > click on the host in question > Triggers.


Once you have the triggers defined that you want, then you subscribe a user to the notifications that you want that user to see and the media type you want to use for the notification.
With alerts in place, you’ll know quickly if a container is using too much CPU, memory, or goes into a restart loop, etc.
Wrapping up
In this post we have really just focused on Zabbix Docker home lab monitoring. However, if you are looking at monitoring your other technologies in the home lab and looking for a monitoring solution that can do just about anything you want it to do, then Zabbix is very capable and of course free and open-source which is great. How about you? Are you using Zabbix currently in your home lab or production environment? Are you looking for a new home lab monitoring solution and considering Zabbix? Let me know your thoughts..








