在Docker中写入/proc/1/fd/1时,以root身份拒绝权限



我有一个运行cron -f的容器,它会阻止容器像容器正常情况下那样输出到stdout。我需要我的cron作业输出到数据狗的stdoutdocker 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可以向其写入

最新更新