Puoi copiare il tuo crontab in un'immagine, in modo che il contenitore avviato da detta immagine esegua il lavoro.
Vedi " Esegui un lavoro cron con Docker " di Julien Boulay nel suo Ekito/docker-cron
:
Creiamo un nuovo file chiamato " hello-cron
" per descrivere il nostro lavoro.
* * * * * echo "Hello world" >> /var/log/cron.log 2>&1
# An empty line is required at the end of this file for a valid cron file.
Il seguente Dockerfile descrive tutti i passaggi per creare l'immagine
FROM ubuntu:latest
MAINTAINER docker@ekito.fr
RUN apt-get update && apt-get -y install cron
# Copy hello-cron file to the cron.d directory
COPY hello-cron /etc/cron.d/hello-cron
# Give execution rights on the cron job
RUN chmod 0644 /etc/cron.d/hello-cron
# Apply cron job
RUN crontab /etc/cron.d/hello-cron
# Create the log file to be able to run tail
RUN touch /var/log/cron.log
# Run the command on container startup
CMD cron && tail -f /var/log/cron.log
(vedi Gaafar 's commento e Come faccio apt-get
installare meno rumoroso? :
apt-get -y install -qq --force-yes cron
può funzionare troppo)
Come osservato da Nathan Lloyd nei commenti :
Nota rapida su un gotcha:
se stai aggiungendo un file di script e stai dicendo a cron di eseguirlo, ricorda che Cron fallisce silenziosamente se lo dimentichi .
RUN chmod 0744 /the_script
O, assicurarsi che il lavoro stesso reindirizzare direttamente a stdout / stderr invece di un file di log, come descritto nella hugoShaka 's risposta :
* * * * * root echo hello > /proc/1/fd/1 2>/proc/1/fd/2
Sostituisci l'ultima riga Dockerfile con
CMD ["cron", "-f"]
Vedi anche (about cron -f
, ovvero cron "primo piano") " docker ubuntu cron -f
non funziona "
Compilalo ed eseguilo:
sudo docker build --rm -t ekito/cron-example .
sudo docker run -t -i ekito/cron-example
Sii paziente, attendi 2 minuti e la tua riga di comando dovrebbe visualizzare:
Hello world
Hello world
Eric aggiunge nei commenti :
Si noti che tail
potrebbe non visualizzare il file corretto se viene creato durante la creazione dell'immagine.
In tal caso, è necessario creare o toccare il file durante il runtime del contenitore per consentire a tail di prelevare il file corretto.
Vedere "L' output di tail -f
alla fine di una finestra mobile CMD
non viene visualizzato ".
RUN apt-get update && apt-get install cron