O comando cron não é instalado por padrão na imagem do ubuntu: 16.04
Precisa executar apt-get install cron
Este é o meu Dockerfile
FROM ubuntu:16.04
RUN apt-get update -y && apt-get install -y \
git \
python \
python-pip
Depois que a imagem do docker é criada, faço o login e tento configurar uma tarefa cron para teste. Para minha surpresa, cron
e crontab
não estão presentes.
# ls
app bin boot dev etc home lib lib64 media mnt opt proc
root run sbin srv sys tmp usr var
# crontab -l
/bin/sh: 6: crontab: not found
# crontab -l
/bin/sh: 7: crontab: not found
# crontab -l
/bin/sh: 10: crontab: not found
# cron
/bin/sh: 11: cron: not found
Mas espero que cron
esteja presente em uma imagem do Ubuntu. Eu escolhi uma imagem errada ou há algo que eu precise fazer para ativar cron
?
As imagens do Docker são mínimas por design e são usadas para criar contêineres, não um sistema operacional completo. Um contêiner está isolando a execução de um aplicativo, por isso ele não terá todos os outros daemons do SO em execução dentro desse ambiente, como cron, syslog, mail, etc., por padrão.
Você pode instalar o cron com:
RUN apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install \
cron \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
dentro do seu Dockerfile. No entanto, para executar as entradas do crontab, você também precisa iniciar o daemon do cron como parte do processo de inicialização do contêiner. Existem ferramentas como forego e supervisord que você pode usar para executar vários processos em seu contêiner (cron e seu aplicativo), mas isso geralmente é o sinal de um antipadrão.