Docker Cron Jobs

Running cron jobs in Docker requires special consideration. You can run cron inside a container, use a sidecar container, or trigger containers externally.

How to Set Up Cron Jobs in Docker

1

Option 1: Cron inside container

Install and run cron daemon in your container

Code
# Dockerfile
FROM ubuntu:22.04

RUN apt-get update && apt-get install -y cron

# Add crontab file
COPY crontab /etc/cron.d/my-cron
RUN chmod 0644 /etc/cron.d/my-cron
RUN crontab /etc/cron.d/my-cron

# Run cron in foreground
CMD ["cron", "-f"]
2

Option 2: Separate cron container

Use docker-compose with a dedicated cron service

Code
# docker-compose.yml
services:
  app:
    build: .
    
  cron:
    build: .
    command: >
      sh -c "while true; do
        curl http://app:3000/api/cron
        sleep 300
      done"
    depends_on:
      - app
3

Option 3: Host cron triggers container

Use host's cron to run docker commands

Code
# Host crontab
*/5 * * * * docker exec myapp php /app/artisan schedule:run
# or
*/5 * * * * docker run --rm myimage /app/task.sh

Docker Cron Limitations vs CronUptime

Docker Limitations

  • Cron daemon adds complexity to containers
  • Logs can be difficult to capture
  • Container restarts reset cron state
  • Timezone configuration challenges
  • Not cloud-native approach

CronUptime Advantages

  • No cron daemon needed in containers
  • Works with any containerized HTTP service
  • Centralized logging and monitoring
  • Cloud-native approach
  • Decoupled from container lifecycle

Why Use CronUptime Instead?

While Docker cron jobs work for basic use cases, managing infrastructure for scheduled tasks adds complexity. CronUptime offers a simpler, serverless alternative.

No Infrastructure

We handle execution. No servers to maintain.

Reliable Timing

Built on Cloudflare for 99.9%+ uptime.

Any Endpoint

Works with any HTTP endpoint on any platform.

Frequently Asked Questions

It's generally better to trigger containers externally. Running cron inside containers adds complexity and goes against the single-process principle of containers.
Options include: a sidecar container with a loop/curl, host crontab triggering docker commands, or external schedulers calling your container's HTTP endpoints.
Cron logs aren't sent to stdout by default. Redirect cron output: * * * * * /script.sh >> /proc/1/fd/1 2>&1, or install and configure rsyslog.

Quick Reference

Cron Expression:

*/5 * * * *

Human Readable:

every 5 minutes

Cron Jobs on Other Platforms

Try CronUptime Free

Schedule HTTP requests without managing Docker infrastructure.

Try it now - Free

Create a cron job running every 5 minutes. No sign-up required.

The URL that will be called. You can also paste a curl command here.

Runs for 7 daysSign in for permanent