在 docker 中以非特权用户身份运行“cron -f”:/var/run/crond.pid:权限被拒绝

在 docker 中以非特权用户身份运行“cron -f”:/var/run/crond.pid:权限被拒绝

我想创建一个包含按计划运行的节点应用程序的 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.logrunning as root

是否可以cron -f以非特权用户身份运行?或者其他方法是否更好?

例如我可以将 cron-job 更改为:

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

并永久删除USER nodeDockerfile这将使我能够以用户npm start身份执行node此操作,但我不确定这是否可以(如:“符合最佳实践”),因为图像的默认用户仍然是root

我还尝试确保 cron 相关文件的权限,按照这个答案是正确的,但似乎没有任何效果。创建文件crond.pid并直接在其上设置权限似乎不是一个好主意。设置这样的权限对我来说很新,所以任何建议都值得赞赏。

相关内容