Назад | Перейти на главную страницу

Запуск 'cron -f' от имени непривилегированного пользователя в докере: /var/run/crond.pid: Permission denied

Я хочу создать контейнер докеров с приложением узла, которое запускается по расписанию. Я пытаюсь иметь cron работает на переднем плане в контейнере и периодически запускает приложение.

Моя проблема в том, что я хочу использовать рекомендуемый пользователь node который имеет ограниченные разрешения. Запускаем это простое изображение:

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" ]

где cron-test выглядит как:

*   *   *   *   *   echo "running as $(whoami)" >> /test/test.log
--empty line--

Результаты в:

$ docker run -v <path on host>:/test:rw test -c 'cron -f'
cron: can't open or create /var/run/crond.pid: Permission denied

Удаление переключателя на USER node в Dockerfile и запустив его, как указано выше, создаст файл /test/test.log и начинает печать running as root к нему.

Можно ли запустить cron -f как непривилегированный пользователь? Или лучше другой подход?

Я мог бы, например, изменить задание cron следующим образом:

*   *   *   *   *  su - node -c 'echo "running as $(whoami)" >> /test/test.log'
--empty line--

И удалить USER node из Dockerfile постоянно. Что позволило бы мне сделать npm start как node пользователь, но я не уверен, будет ли это нормально (например: 'inline with best pratices'), поскольку пользователь изображения по умолчанию все равно будет root?

Я также попытался убедиться, что разрешения на файлы, связанные с cron, согласно этот ответ, были правильными, но, похоже, не оказали никакого влияния. Создание crond.pid файл и установка разрешений непосредственно для него - не самая лучшая идея. Установка таких разрешений для меня довольно нова, поэтому приветствую любые советы.