Docker 访问 `/dev/dri` 设备的权限问题

Docker 访问 `/dev/dri` 设备的权限问题

我有权限问题。我在跑步光棱镜里面一个码头工人Ubuntu 22.04 上的容器。我想使用 Intel QuickSync 硬件转码。为此,应用程序需要访问/dev/dri设备。我试图在不使用priviledged: truedocker-compose 文件的情况下运行应用程序。当使用 时它可以工作(即应用程序能够使用/dev/dripriviledged: true。当我删除 时priviledged: true,应用程序会报告这一点,即使在文件devices:\n - /dev/dridocker-compose.yml

$ docker-compose up -d
...
 ⠿ Container photoprism-photoprism-1  Starting                                                                                                                             1.9s 
Error response from daemon: error gathering device information while adding custom device "/dev/dri": no such file or directory

目前我有本地安装(即不使用 Docker),并且运行得/dev/dri很好。

以下是 的权限/dev/dri

$ ls -al /dev/dri
total 0
drwxr-xr-x   3 root root        100 May 29 14:09 .
drwxr-xr-x  19 root root       5200 May 29 14:09 ..
drwxr-xr-x   2 root root         80 May 29 14:09 by-path
crw-rw----+  1 root render 226,   0 May 29 14:09 card0
crw-rw----+  1 root render 226, 128 May 29 14:09 renderD128

(是一个组名,但在列表输出中render的含义是什么?)226,

以下是用户的详细信息(正在运行、正在使用 的plex用户):plexmediaserver/dev/dri

$ id plex
uid=998(plex) gid=998(plex) groups=998(plex),44(video),109(render)

...以及正在运行的用户docker-compose up -d

$ id myuser
uid=1000(myuser) gid=1000(myuser) groups=1000(myuser),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),120(lpadmin),131(lxd),132(sambashare)

我想既然plex用户可以很好地使用/dev/dri,也许我plex也可以将用户与 Photoprism 一起使用。但我无法让它工作:

   # inside docker compose
   user: "998:998"

文件的相关部分docker-compose.yml

services:
  photoprism:
    image: photoprism/photoprism:latest
    ...
    ## Start as non-root user before initialization (supported: 0, 33, 50-99, 500-600, and 900-1200):
    user: "998:998"
    ## Share hardware devices with FFmpeg and TensorFlow (optional):
    devices:
      - "/dev/dri:/dev/dri"                         # Intel QSV
    ...

TL;DR:当我使用 docker 特权模式时有效,否则无效。另外,我可以使用一些帮助来理解ls输出,其中神秘地包含一个无法解释的内容226,(参见上面的ls输出)。

答案1

我的 QNAP TS-251b 和 photoprism 也遇到了类似的问题。以下 docker cmd 对我有用:

sudo docker run -d --device=/dev/dri photoprism

我还就设备映射问题联系了 QNAP 支持人员,他们为我提供了以下映射(创建)dri 设备的步骤(在容器中执行):

mkdir /dev/dri
mknod /dev/dri/card0 c 226 0
mknod /dev/dri/renderD128 c 226 128
chmod 666 /dev/dri/card0
chmod 666 /dev/dri/renderD128

希望能帮助到你。

相关内容