Я хочу создать контейнер докеров с приложением узла, которое запускается по расписанию. Я пытаюсь иметь 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
файл и установка разрешений непосредственно для него - не самая лучшая идея. Установка таких разрешений для меня довольно нова, поэтому приветствую любые советы.