我正在尝试启动一个 docker 容器,它有 2 个服务。其中一项服务需要以非 root 用户身份运行,否则他将无法启动。另一个必须以 root 身份运行。
现在我想将non_root_service.log
文件链接到/dev/tty
或/dev/stdout
,以便 docker 可以捕获日志(使用 进行检查docker logs $CONTAINER
):
ln -s /dev/stdout non_root_service.log
问题是这样做时,非 root 用户无权写入/dev/tty
或/dev/stdout
导致非 root 服务启动时出现以下错误:
cannot open "non_root_service.log": Permission denied
但如果我不创建链接,我将无法捕获日志docker logs $CONTAINER
。有谁知道如何解决这个问题,以便我可以以非 root 身份运行用户并将日志文件链接到/dev/{tty,stdout}
?
PS:无论我使用 shell 脚本CMD ["starter.sh"]
还是主管CMD ["supervisord", "-n", "-c", "/app/supervisord.conf"]
来启动这两个服务,我都会遇到相同的错误。
答案1
也许不是最干净的解决方案,但你可以尝试这个:
tail -f non_root_service.log &
简单地将文件尾部到标准输出并将尾部进程置于后台?您也可以尝试直接尾部到标准输出 p:
ln -s ln -fs /proc/self/fd/1 non_root_service.log
但是,您确定您有权访问 non_root_service.log 文件吗?如果你跑步stat non_root_service.log
,你会看到什么whoami
?