Easily backup your docker databases
app | ||
backups/2025-04-14 | ||
.dockerignore | ||
.gitignore | ||
.tool-versions | ||
docker-compose.yml | ||
Dockerfile | ||
entrypoint.sh | ||
LICENSE | ||
README.md |
baktainer
Easily backup databases running in docker containers.
Features
- Backup MySQL, PostgreSQL, MongoDB, and SQLite databases
- Run on a schedule using cron expressions
- Backup databases running in docker containers
- Define which databases to backup using docker labels
Installation
services:
baktainer:
image: jamez01/baktainer:latest
container_name: baktainer
restart: unless-stopped
volumes:
- ./backups:/backups
- /var/run/docker.sock:/var/run/docker.sock
environment:
- BT_CRON="0 0 * * *" # Backup every day at midnight
- "BT_DOCKER_URL=unix:///var/run/docker.sock"
- BT_THREADS=4
- BT_BACKUP_DIR=/backups
- BT_LOG_LEVEL=info
# Enable if using SSL over tcp
#- BT_SSL = true
#- BT_CA
#- BT_CERT
#- BT_KEY
Environment Variables
Variable | Description | Default |
---|---|---|
BT_CRON | Cron expression for scheduling backups | 0 0 * * * |
BT_THREADS | Number of threads to use for backups | 4 |
BT_BACKUP_DIR | Directory to store backups | /backups |
BT_LOG_LEVEL | Log level (debug, info, warn, error) | info |
BT_SSL | Enable SSL for docker connection | false |
BT_CA | Path to CA certificate | none |
BT_CERT | Path to client certificate | none |
BT_KEY | Path to client key | none |
BT_DOCKER_URL | Docker URL | unix:///var/run/docker.sock |
Usage
Add labels to your docker containers to specify which databases to backup.
services:
db:
image: postgres:17
container_name: my-db
restart: unless-stopped
volumes:
- db:/var/lib/postgresql/data
environment:
POSTGRES_DB: "${DB_BASE:-database}"
POSTGRES_USER: "${DB_USER:-user}"
POSTGRES_PASSWORD: "${DB_PASSWORD:-StrongPassword}"
labels:
- baktainer.backup: "true"
- baktainer.db.name: "my-db"
- baktainer.db.password: "StrongPassword"
- baktainer.db.engine: "postgres"
- baktainer.name: "MyApp"