Jibri报AccessDeniedException但目录权限已配置,录制失败
Docker部署Jitsi-Meet中Jibri录制目录权限问题排查
问题说明
Docker部署的Jitsi-Meet环境里,连接Prosody的Jibri实例无法创建录制目录并写入文件,报错信息如下:
FileUtilsKt.createIfDoesNotExist#28: Error creating directory java.nio.file.AccessDeniedException: /run/s6/services/40-jibri/~ at java.base/sun.nio.fs.UnixException.translateToIOException(UnixException.java:90) at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111) at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:116) at java.base/sun.nio.fs.UnixFileSystemProvider.createDirectory(UnixFileSystemProvider.java:389) at java.base/java.nio.file.Files.createDirectory(Files.java:690) at java.base/java.nio.file.Files.createAndCheckIsDirectory(Files.java:797) at java.base/java.nio.file.Files.createDirectories(Files.java:783) at org.jitsi.jibri.util.FileUtilsKt.createIfDoesNotExist(FileUtils.kt:26) at org.jitsi.jibri.service.impl.FileRecordingJibriService.start(FileRecordingJibriService.kt:153) at org.jitsi.jibri.JibriManager.startService$lambda-2(JibriManager.kt:239) at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at java.base/java.lang.Thread.run(Thread.java:829)
已手动创建目录、设置所有用户/组读写权限,且Docker绑定卷正常(日志可写入该目录),但问题依旧,ffmpeg无日志可排查。
可能遗漏的配置点
- Jibri容器运行用户权限:Jibri默认以非root用户(通常是
jibri)运行,即便宿主机目录权限全开,容器内该用户可能无对应目录的读写权限。需确保容器内jibri用户对挂载的录制目录拥有完整权限,可在启动容器时指定与宿主机目录所有者匹配的UID和GID,或在Dockerfile中调整用户权限。 - 录制目录配置错误:检查Jibri配置文件(通常为
/etc/jitsi/jibri/config.json)中的recording_directory字段,确认指向Docker绑定卷的容器内路径,而非宿主机路径。报错中的/run/s6/services/40-jibri/~是s6服务目录(root权限),说明配置里的录制目录可能被错误设为当前用户家目录(~),需修改为正确的挂载卷路径。 - SELinux/AppArmor限制:若宿主机启用SELinux或AppArmor,可能阻止容器内进程写入挂载目录。可临时关闭SELinux(
setenforce 0)测试,或为挂载目录添加SELinux上下文(chcon -Rt svirt_sandbox_file_t /你的宿主机目录)。 - Docker卷挂载细节:确认绑定卷挂载语法为
宿主机路径:容器内路径,且容器内挂载路径的父目录权限允许jibri用户创建子目录。 - S6服务目录权限冲突:
/run/s6/services/40-jibri/是s6管理的服务目录,权限归所有root,Jibri无法在此创建子目录,必须修改配置将录制目录指定到挂载的卷路径。
内容的提问来源于stack exchange,提问作者Teddydotpy
相关产品推荐
相关产品推荐

