peterweissdk/keepalived

By peterweissdk

•Updated 3 months ago

Docker container for running Keepalived with VRRP

Image
Networking
0

3.5K

peterweissdk/keepalived repository overview

ā šŸ’¾ Keepalived Docker Container

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.

Tag summary

Content type

Image

Digest

sha256:00561ac27…

Size

255 Bytes

Last updated

3 months ago

docker pull peterweissdk/keepalived:sha256-5fd5c2365001e855b1069896288bfe55a7fa6aa2ebc1b608708afbe786677938.sig