Jellyfin + AMD GPU (VAAPI) works in Compose Service but fails in App Service
Environment
- EasyPanel: Latest version (June 2026)
- OS: Ubuntu Server 24.04
- GPU: AMD RX 580
- Driver: amdgpu
- Container image: linuxserver/jellyfin:latest
Problem
When deploying Jellyfin as a regular EasyPanel App (Docker Swarm service), the container receives the /dev/dri bind mount, but hardware acceleration does not work.
Inside the container:
ffmpeg -vaapi_device /dev/dri/renderD128
returns:
No VA display found for device /dev/dri/renderD128
and:
The service inspection shows:
"Devices": null,
"DeviceCgroupRules": null
even though /dev/dri is mounted.
Verification
The user abc belongs to:
and permissions are correct.
Inside the container:
/dev/dri/card0
/dev/dri/renderD128
are visible.
However VAAPI initialization fails.
Workaround
Deploying the exact same Jellyfin configuration as a Compose Service works immediately.
Compose configuration:
devices:
- /dev/dri:/dev/dri
group_add:
- "44"
- "992"
After migrating to Compose:
VAAPI device /dev/dri/renderD128 is AMD GPU
VAAPI device /dev/dri/renderD128 supports Vulkan DRM interop
FFmpeg starts correctly using:
-init_hw_device drm=dr:/dev/dri/renderD128
-init_hw_device vaapi=va@dr
-init_hw_device vulkan=vk@dr
-hwaccel vaapi
h264_vaapi
and hardware transcoding works.
Expected behavior
A standard EasyPanel App deployment should provide the same GPU access as a Compose Service when /dev/dri is configured.
Result
- App Service (Swarm): VAAPI fails.
- Compose Service: VAAPI works correctly.
- Same host.
- Same image.
- Same GPU.
- Same mounts.
This suggests a difference in how EasyPanel creates Swarm services versus Compose services regarding GPU device permissions and DRM access.
Jellyfin + AMD GPU (VAAPI) works in Compose Service but fails in App Service
Environment
Problem
When deploying Jellyfin as a regular EasyPanel App (Docker Swarm service), the container receives the
/dev/dribind mount, but hardware acceleration does not work.Inside the container:
returns:
and:
The service inspection shows:
even though
/dev/driis mounted.Verification
The user
abcbelongs to:and permissions are correct.
Inside the container:
are visible.
However VAAPI initialization fails.
Workaround
Deploying the exact same Jellyfin configuration as a Compose Service works immediately.
Compose configuration:
After migrating to Compose:
FFmpeg starts correctly using:
and hardware transcoding works.
Expected behavior
A standard EasyPanel App deployment should provide the same GPU access as a Compose Service when
/dev/driis configured.Result
This suggests a difference in how EasyPanel creates Swarm services versus Compose services regarding GPU device permissions and DRM access.