Eu quero criar um contêiner docker com um aplicativo de nó que seja executado em um agendamento. Eu estou tentando ter cron
em execução em primeiro plano no contêiner e iniciar periodicamente o aplicativo.
Meu problema é que eu quero usar o usuário recomendado node
, que tem permissões limitadas. Executando esta imagem simples:
FROM node:8-slim
RUN apt-get update && apt-get -y install cron
RUN mkdir /test \
&& chown node:node /test
ADD cron-test /etc/cron.d/cron-test
RUN chmod 0644 /etc/cron.d/cron-test
USER node
RUN crontab /etc/cron.d/cron-test
ENTRYPOINT [ "/bin/bash" ]
em que cron-test
se parece com:
* * * * * echo "running as $(whoami)" >> /test/test.log
--empty line--
Resultados em:
$ docker run -v <path on host>:/test:rw test -c 'cron -f'
cron: can't open or create /var/run/crond.pid: Permission denied
Remover o comutador para USER node
in Dockerfile
e executá-lo como acima cria um arquivo /test/test.log
e inicia a impressão de running as root
.
É possível executar cron -f
como um usuário sem privilégios? Ou outra abordagem seria melhor?
Eu poderia, por exemplo, alterar o cron-job:
* * * * * su - node -c 'echo "running as $(whoami)" >> /test/test.log'
--empty line--
E remova USER node
do Dockerfile
permanentemente. O que me permitiria fazer npm start
como o usuário node
, mas não tenho certeza se isso seria ok (como em: 'inline with best pratices'), já que o usuário padrão da imagem ainda seria root
?
Eu também tentei me certificar de que as permissões nos arquivos relacionados ao cron, conforme esta resposta , estavam corretas, mas não parece ter nenhum efeito. Criar o arquivo crond.pid
e definir permissões diretamente nele não pareceu uma ótima ideia. Definir permissões como essa é novidade para mim, então qualquer conselho é apreciado.
Tags permissions cron docker