我有权限问题。我在跑步光棱镜里面一个码头工人Ubuntu 22.04 上的容器。我想使用 Intel QuickSync 硬件转码。为此,应用程序需要访问/dev/dri
设备。我试图在不使用priviledged: true
docker-compose 文件的情况下运行应用程序。当使用 时它可以工作(即应用程序能够使用/dev/dri
)priviledged: true
。当我删除 时priviledged: true
,应用程序会报告这一点,即使在文件devices:\n - /dev/dri
中docker-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
希望能帮助到你。