我想创建一个包含按计划运行的节点应用程序的 docker 容器。我尝试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-job 更改为:
* * * * * su - node -c 'echo "running as $(whoami)" >> /test/test.log'
--empty line--
并永久删除USER node
。Dockerfile
这将使我能够以用户npm start
身份执行node
此操作,但我不确定这是否可以(如:“符合最佳实践”),因为图像的默认用户仍然是root
?
我还尝试确保 cron 相关文件的权限,按照这个答案是正确的,但似乎没有任何效果。创建文件crond.pid
并直接在其上设置权限似乎不是一个好主意。设置这样的权限对我来说很新,所以任何建议都值得赞赏。