Docs gap: Kubernetes device-plugin GPU passthrough breaks OpenCL (tone-mapping) while VAAPI works, due to /dev/dri/by-path/* ownership

Open Beginner friendly
#336 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
2/5
Estimated time
1-3 hours
Newbie friendliness
76/100
Issue type
Documentation
Clarity
Mostly clear
Activity status
Active
Tech stack
docker, kubernetes

Research direction

Start in the hardware-acceleration documentation and review the guidance for Kubernetes device-plugin setups. Document the /dev/dri/by-path/* ownership check for cases where VAAPI/QSV work but OpenCL-dependent features fail with ffmpeg exit 237, and explain that ATTACHED_DEVICES_PERMS=/dev/dri covers the paths. Done means the troubleshooting guidance includes this cause and fix.

Written by the indexing model from the issue text.

Description

Is there an existing issue for this?
  • I have searched the existing issues
Description

Running this image under Kubernetes with a device plugin (e.g. Intel's intel-device-plugins-for-kubernetes), instead of a plain Docker --device /dev/dri bind mount, breaks OpenCL while VAAPI/QSV keep working.

Cause:

  • The device plugin exposes /dev/dri/renderD128 and /dev/dri/card0, chowned root:root.
  • /dev/dri/by-path/pci-<addr>-render and -card are also present (same major:minor), but the device plugin doesn't manage them — they keep the host's own group (render/video, arbitrary GID).
  • Intel's OpenCL/NEO runtime opens the by-path render node, not renderD128. VAAPI/QSV work; OpenCL (Dolby Vision tone-mapping) fails, ffmpeg exit 237 (AVERROR(ENODEV)).

Fix: ATTACHED_DEVICES_PERMS=/dev/dri — same mechanism as #284 / #305. find /dev/dri -print recurses into by-path/ and covers the mismatched GID.

Evidence

Device ownership mismatch inside the container:

$ ls -la /dev/dri/ /dev/dri/by-path/
crw-rw---- 1 root root 226,   0 card0
crw-rw---- 1 root root 226, 128 renderD128
crw-rw---- 1 root video  226,   0 by-path/pci-0000:00:02.0-card
crw-rw---- 1 root 992    226, 128 by-path/pci-0000:00:02.0-render

strace on clinfo as the non-root PUID user, filtered to the relevant call:

openat(AT_FDCWD, "/dev/dri/by-path/pci-0000:00:02.0-render", O_RDWR|O_CLOEXEC) = -1 EACCES (Permission denied)

Resulting ffmpeg failure:

[AVHWDeviceContext] Failed to get number of OpenCL platforms: -1001.
Device creation failed: -19.
Failed to set value 'opencl=ocl@va' for option 'init_hw_device': No such device

ATTACHED_DEVICES_PERMS=/dev/dri picking it up correctly on container start:

**** permissions for /dev/dri/renderD128 are good ****
**** permissions for /dev/dri/card0 are good ****
**** creating group groupXXXX with id 992 ****
**** adding /dev/dri/by-path/pci-0000:00:02.0-render to group groupXXXX with id 992 ****
**** adding /dev/dri/by-path/pci-0000:00:02.0-card to group video with id 44 ****
Suggestion

Add a line to the hardware-acceleration docs: under Kubernetes/device-plugin setups, if VAAPI/QSV work but OpenCL-dependent features fail with ffmpeg exit 237, check /dev/dri/by-path/* group ownership. ATTACHED_DEVICES_PERMS=/dev/dri covers it.

Dominant language
Dockerfile
Stars
903
Forks
134
PR merge metrics
No merged PRs in 30d

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from linuxserver/docker-jellyfin

All issues in linuxserver/docker-jellyfin

Similar issues

More Documentation issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.