A small utility written in Rust that allows scheduling Docker commands to be executed on containers (typically to perform database dumps within a Docker Compose setup).
- Execute commands in Docker containers via Docker API
- Standard cron expressions with second precision
- Optional run-on-startup for immediate execution
- Capture and save command output to files
- Structured logging with tracing
- Secure non-root execution
docker-compose -f docker-compose.example.yml up --buildservices:
crooner:
image: agjini/crooner:0.1.3
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./config.toml:/app/config.toml:ro
- ./backup:/backup
restart: unless-stoppedCreate a config.toml file:
[[jobs]]
name = "PostgreSQL Backup"
at = "0 0 2 * * *" # Every day at 2:00 AM
container = "postgres-container"
command = ["pg_dump", "-U", "postgres", "mydb"]
output_file = "/backup/postgres_backup.sql"
run_on_startup = true
# You can define as many jobs as you want by repeating [[jobs]]
name: Job identifier (string)at: Cron expression (format:second minute hour day month weekday)container: Target container name (string)command: Command to execute (array of strings)output_file: Optional output file path to write the output of the command (string)run_on_startup: Execute immediately on startup (boolean, default: false)
┌───────────── second (0-59)
│ ┌─────────── minute (0-59)
│ │ ┌───────── hour (0-23)
│ │ │ ┌─────── day (1-31)
│ │ │ │ ┌───── month (1-12)
│ │ │ │ │ ┌─── weekday (0-6, 0=Sunday)
│ │ │ │ │ │
* * * * * *
Examples:
0 0 2 * * *- Every day at 2:00 AM0 */15 * * * *- Every 15 minutes0 0 0 1 * *- First day of every month at midnight
Control log level with RUST_LOG environment variable:
environment:
- RUST_LOG=info # info (default), debug, trace- Database backups (PostgreSQL, MySQL, MongoDB)
- Cleanup and maintenance tasks
- Data exports and archiving
- Health checks and monitoring
cargo build --releaseMIT
