Plex Rockon Nvidia GPU Passthrough: Fixing Hardware Transcoding in Docker
The problem is almost always in the container, not the host
When Plex finds your Nvidia card in its settings but nvidia-smi shows zero GPU activity during a transcode, it almost always means the Docker container never actually received GPU access. The card showing up in Plex’s dropdown is a red herring — Plex queries host-level driver information, which works fine from outside the container sandbox. That doesn’t mean the container itself can touch the GPU.
There’s also a second, separate issue worth knowing about: whether the GTX 760’s NVENC generation is supported by current Plex builds. More on that below.
What daemon.json actually does
The /etc/docker/daemon.json entry in the original post is correct. But it only registers the nvidia runtime as an available option. It does not apply it to containers by default.
Think of it like installing a printer driver — the driver is there, but every application still has to choose to use it. Each Docker container has to explicitly opt into the nvidia runtime at launch time. If it doesn’t, it runs fully isolated from the GPU, full stop.
The two ways to opt in:
--runtime=nvidiain the container’s launch parameters (the classic method)--gpus allon Docker versions that ship with nvidia-container-toolkit integrated
If neither of those flags is present in your Rockon’s configuration, Docker treats that container as GPU-less.
Configuring the Plex Rockon for GPU access
On Unraid, Rockons are Docker containers managed through the web interface. You edit them the same way you’d edit any Docker template. Open the Plex Rockon, click Edit, and find the Extra Parameters field. Add this:
--runtime=nvidia
Then add two environment variables to the container:
NVIDIA_VISIBLE_DEVICES=all
NVIDIA_DRIVER_CAPABILITIES=all
NVIDIA_VISIBLE_DEVICES=all tells the nvidia container runtime to expose all GPUs to the container. If you have multiple GPUs and want to target a specific one, run nvidia-smi -L on the host to get the UUID, then set it directly: NVIDIA_VISIBLE_DEVICES=GPU-xxxxxxxx-....
NVIDIA_DRIVER_CAPABILITIES=all enables compute, video, utility, and graphics capabilities inside the container. Plex specifically needs the video capability for NVENC and NVDEC. Setting it to all is the safe default; you can narrow it to compute,video,utility if you prefer.
Save the template and restart the Rockon. Then kick off a transcode and check nvidia-smi on the host. You should see a process — usually listed as ffmpeg or the Plex transcoder binary — under the GPU’s active process list.
Is the GTX 760 actually supported?
The GTX 760 is a Kepler-architecture card (GK104). Kepler was the generation that introduced NVENC, but it was first-generation NVENC with real limitations. Plex’s support for Kepler NVENC has been inconsistent, and some newer Plex Media Server versions have quietly dropped or broken it.
The fastest way to tell what’s happening is to read the Plex transcoder log. It’s typically found in your Plex application data folder under Logs, named something like Plex Transcoder. Look for NVENC-related output near the start of a transcode session.
- An error like
Error opening codec nvenc_h264or a failed NVENC initialization means the Docker passthrough is working but the card isn’t compatible with that Plex build - No NVENC attempt in the log at all means the container doesn’t have GPU access yet — fix the Docker configuration first
Those two failure modes look identical from the Plex dashboard but require completely different fixes. The log tells you which problem you’re actually dealing with.
Verifying it’s actually working
nvidia-smi during an active transcode is the correct check. A process should appear under the GPU’s process list. Nothing there means software transcoding, regardless of what the Plex hardware transcoding dashboard says.
For more detail, run nvidia-smi dmon to watch encoder and decoder utilization in real time. The ENC and DEC columns should show activity during a transcode. If they stay at 0%, hardware acceleration is not running.
One more thing: make sure the stream you’re testing actually requires transcoding. Direct play and direct stream bypass the transcoder entirely, so they won’t exercise the GPU at all. Force a transcode by playing to a client that can’t handle the source quality, or use Plex’s “Convert Automatically” option in the player settings.
