我有一个运行cron -f
的容器,它会阻止容器像容器正常情况下那样输出到stdout
。我需要我的cron作业输出到数据狗的stdout
和docker logs
才能看到它。
我从这个答案中得到了写入proc文件的想法:https://stackoverflow.com/a/46220104/5915915
这样一来,我的亲信就开始失败了。当我尝试在容器内手动写入文件时,例如使用
echo 'hi' > /proc/1/fd/1
有人告诉我:
bash: 1: Permission denied
ls -l
的结果是:
root@my-container:/proc/1/fd# ls -l
ls: cannot read symbolic link '0': Permission denied
ls: cannot read symbolic link '1': Permission denied
ls: cannot read symbolic link '2': Permission denied
ls: cannot read symbolic link '3': Permission denied
total 0
lrwx------ 1 root root 64 Mar 8 23:46 0
l-wx------ 1 root root 64 Mar 8 23:46 1
l-wx------ 1 root root 64 Mar 8 23:46 2
lrwx------ 1 root root 64 Mar 8 23:46 3
一个类似的问题在op的评论中有一个解决方案,但他的文件不知何故归他的db用户所有,而不是root用户。这个主意对我不管用。https://www.reddit.com/r/docker/comments/imx8zr/permission_denied_when_write_to_proc1fd1/
root
的权限是如何被拒绝的?或者,有没有更好的方法让我的cron的输出显示在stdout
中?
解决这一问题的方法是让文件归非root用户所有。这可以通过在切换用户后从CMD
在启动脚本内部调用cron -f
来实现。
在我的Dockerfile 的末尾
USER worker
在我的码头撰写:
cron_service:
CMD: ["./start.sh"]
在start.sh 中
cron -f
现在,为cron进程创建的proc文件将归worker
所有,cron可以向其写入