It allows you to define cron tasks for your containers via container labels.
2.2K

docker_scheduler is a simple task scheduler for Docker containers. It executes scheduled (cron) tasks directly inside containers based on Docker labels โ no external orchestrator or scheduler required.
You can assign special scheduler labels to your containers. The scheduler container will read these labels and execute the defined commands at the specified times.
How it works:
DOCKER_HOST is set.It is inspired by Ofeliaโ . It is great project, but it has one big disadvantage for me - it needs to be restarted when applying changes in labels (at this time 5/2025). So I decided to write my own.
If you just want to use the tool, you can pull the ready-to-use image from Docker Hub:
Standalone
docker run -d \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
-e TZ=Europe/Prague \
lukaskaplan/docker-scheduler
... via docker compose
services:
scheduler:
image: lukaskaplan/docker-scheduler
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
environment:
TZ: Europe/Prague
DOCKER_HOSTIf the Docker daemon is running on a remote machine, set DOCKER_HOST instead of mounting the socket.
The following environment variables are supported (same as the Docker CLI, powered by docker.from_env()โ ):
| Variable | Description |
|---|---|
DOCKER_HOST | URL to the Docker host (e.g. tcp://remote-host:2375) |
DOCKER_TLS_VERIFY | Verify the host against a CA certificate |
DOCKER_CERT_PATH | Path to a directory containing TLS certificates |
Standalone
docker run -d \
-e DOCKER_HOST=tcp://remote-host:2375 \
-e TZ=Europe/Prague \
lukaskaplan/docker-scheduler
... via docker compose
services:
scheduler:
image: lukaskaplan/docker-scheduler
environment:
DOCKER_HOST: tcp://remote-host:2375
TZ: Europe/Prague
Run docker compose up -d
(As shown above.)
Example:
services:
your_container:
image: your-image
labels:
# Turn on scheduler for this container:
scheduler.enable: "true"
# Replace <job-name> be name of the job:
scheduler.<job-name>.schedule: "*/2 * * * *"
scheduler.<job-name>.command: "echo Hello World!"
# You can define multiple jobs:
scheduler.backup.schedule: "0 2 * * *"
scheduler.backup.command: "pg_dumpall -U postgres > /backup/db.sql"
scheduler.cleanup.schedule: "0 4 * * *"
scheduler.cleanup.command: "rm -rf /tmp/*"
# You can change the user that owns the command (like with docker exec --user <user>):
scheduler.touch.schedule: "0 2 * * *"
scheduler.touch.command: "whoami > /tmp/created_by_user_www-data"
scheduler.touch.user: "www-data"
docker logs -f <docker_scheduler_container_id>
If you want to contribute or run the scheduler locally:
git clone https://github.com/lukaskaplan/docker_scheduler.git
cd docker_scheduler
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
docker build . -t docker_scheduler
docker run -it --rm -v /var/run/docker.sock:/var/run/docker.sock:ro -e TZ=Europe/Prague docker_scheduler
Ensure the Docker daemon is running and the socket is accessible.
Official Docker image: https://hub.docker.com/r/lukaskaplan/docker-schedulerโ
This project is licensed under the MIT License. See LICENSEโ for details.
Contributions are welcome! If you have suggestions, issues, or ideas, please open an issue or pull request.
Content type
Image
Digest
sha256:c3bfa0e50โฆ
Size
22 MB
Last updated
3 months ago
docker pull lukaskaplan/docker-scheduler