Executando 'cron -f' como um usuário não-privilegiado no docker: /var/run/crond.pid: Permission denied

1

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.

    
por Christian Eriksson 25.10.2018 / 15:40

0 respostas