๐Ÿ’พ Keepalived Docker Container

February 25, 2026 ยท View on GitHub

Static Badge Static Badge Static Badge Static Badge

A lightweight, Alpine-based Docker container for running Keepalived with VRRP (Virtual Router Redundancy Protocol) support.

โœจ Features

  • Alpine-based: Lightweight and secure base image
  • VRRP support: High availability with Virtual Router Redundancy Protocol (VRRP)
  • Easy Configuration: Configure Keepalived using environment variables, and service check-scripts
  • Health Checks: Monitor service health with built-in Docker health checks

๐Ÿš€ Quick Start

Run the container:

# Pull the image
docker pull peterweissdk/keepalived

# Run with custom configuration
docker run -d \
  --name keepalived \
  --restart=unless-stopped \
  --cap-add=NET_ADMIN \
  --cap-add=NET_BROADCAST \
  --cap-add=NET_RAW \
  --net=host \
  --env-file .env \
  keepalived:latest

# Run the container using the provided Docker Compose and .env file
docker compose up -d

๐Ÿ”ง Configuration

Environment Variables

VariableDescriptionExample
TZContainer timezoneEurope/Copenhagen
VRRP_INSTANCEVRRP instance nameVI_1
INTERFACENetwork interfaceeth0
STATENode state (MASTER/BACKUP)MASTER
PRIORITYNode priority (1-255)100
ROUTER_IDUnique router ID52
VIRTUAL_IPSVirtual IP address with subnet mask192.168.1.100/24
UNICAST_SRC_IPSource IP for unicast communication192.168.1.101
UNICAST_PEERSPeer IP addresses for unicast communication192.168.1.102
WEIGHTWeight for tracked scripts50
FALLNumber of failures before transition2
RISENumber of successes before transition2

Required Capabilities

  • NET_ADMIN: For network interface configuration
  • NET_BROADCAST: For VRRP advertisements
  • NET_RAW: For raw socket access

Service Check-Script

Create a script to run at regular intervals to check the state of your service. Create a bind mount and copy the script into it

  • Name of script: check-script.sh
  • Bind mount point: /usr/local/scripts/
  • Runs at regular intervals: 2 seconds

๐Ÿ—๏ธ Building from Source

# Clone the repository
git clone https://github.com/peterweissdk/keepalived.git
cd keepalived

# Build the image
docker build -t keepalived:latest .

๐Ÿ“ Directory Structure

keepalived/
โ”œโ”€โ”€ conf/
โ”‚   โ””โ”€โ”€ keepalived.conf_tpl
โ”œโ”€โ”€ scripts/
โ”‚   โ””โ”€โ”€ check_and_run.sh
โ”œโ”€โ”€ .github/
โ”œโ”€โ”€ .env
โ”œโ”€โ”€ Dockerfile
โ”œโ”€โ”€ docker-entrypoint.sh
โ”œโ”€โ”€ healthcheck.sh
โ”œโ”€โ”€ docker-compose.yml
โ”œโ”€โ”€ LICENSE
โ””โ”€โ”€ README.md

๐Ÿ” Health Check

The container includes a comprehensive health check system that monitors:

  1. Keepalived Process Status

    • Verifies the keepalived daemon is running
  2. Virtual IP environment variable

    • Verifies the VIRTUAL_IPS environment variable is set

View health status:

docker inspect --format='{{.State.Health.Status}}' keepalived

View detailed health check history:

docker inspect --format='{{json .State.Health}}' keepalived | jq

Watch health status in real-time:

watch -n 5 'docker inspect --format="{{.State.Health.Status}}" keepalived'

๐Ÿค Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

๐Ÿ†˜ Support

If you encounter any issues or need support, please file an issue on the GitHub repository.

๐Ÿ“„ License

This project is licensed under the GNU GENERAL PUBLIC LICENSE v3.0 - see the LICENSE file for details.