Plex server on Linux in Docker: frequent transcode errors when not transcoding

Hi, I’m using Plex server 4.125.1 on a Synology NAS that runs DSM 7.2. I recently migrated my install to Docker. That worked fine, but I’ve started having issues where the container shows high CPU and becomes unhealthy. Looking at the Plex console, red errors appear.

In the logs, that looks like this (repeated until I restart the container):

EAE not running, or wrong folder? Could not read '/tmp/pms-fc5b33c4-b1f7-4149-88ba-ff5bbb197637/EasyAudioEncoder/Convert to WAV (to 8ch or less)/3a566887-7c0b-4014-a165-4bd6fe7d8cac_26435-0-2178.wav'
May 28, 2024 11:46:29.001 [139896006974264] ERROR - [Req#1944e/Transcode/3a566887-7c0b-4014-a165-4bd6fe7d8cac/609b11a4-1327-40cf-b298-054805bb54ce] [eac3_eae @ 0x7f5d68fffdc0] error reading output: -5 (I/O error)
May 28, 2024 11:46:29.001 [139896012340024] ERROR - [Req#1944f/Transcode/3a566887-7c0b-4014-a165-4bd6fe7d8cac/609b11a4-1327-40cf-b298-054805bb54ce] Error while decoding stream #0:4: I/O error
May 28, 2024 11:46:34.000 [139895996791608] ERROR - [Req#19450/Transcode/3a566887-7c0b-4014-a165-4bd6fe7d8cac/609b11a4-1327-40cf-b298-054805bb54ce] [eac3_eae @ 0x7f5d68fffdc0] EAE timeout! EAE not running, or wrong folder? Could not read '/tmp/pms-fc5b33c4-b1f7-4149-88ba-ff5bbb197637/EasyAudioEncoder/Convert to WAV (to 8ch or less)/3a566887-7c0b-4014-a165-4bd6fe7d8cac_26435-0-2179.wav'
May 28, 2024 11:46:34.001 [139896006974264] ERROR - [Req#19451/Transcode/3a566887-7c0b-4014-a165-4bd6fe7d8cac/609b11a4-1327-40cf-b298-054805bb54ce] [eac3_eae @ 0x7f5d68fffdc0] error reading output: -5 (I/O error)
May 28, 2024 11:46:34.001 [139896012340024] ERROR - [Req#19452/Transcode/3a566887-7c0b-4014-a165-4bd6fe7d8cac/609b11a4-1327-40cf-b298-054805bb54ce] Error while decoding stream #0:4: I/O error

I’m not sure how to troubleshoot. Maybe I’ve mapped a volume wrong in my docker-compose and Plex can’t find the transcode folder? But, I don’t transcode and actually turned off remote sharing to try to fix this. Also, the issue happens sporadically.

As an update, I just checked my docker install folder and Plex has added many new folders for EasyAudioEncoder. Surely this is related. Screenshot attached.

These are the volumes I’ve mapped. Is this wrong? Plex does use the /config folder from the first volume mapping despite me not explicitly pointing to that in the install folder, but it does not use /tmp, which is empty. I had trouble finding a docker-compose that worked and maybe this doesn’t.

    volumes:
      - ./plex:/config
      - ./plex:/tmp
      - /volume1/Media:/data

Can anyone suggest how to fix? Thanks!

Why not use the native Synology app?
You’ll not have to fuss with a compose
All the files will properly be setup for you in the PlexMediaServer shared folder.

You’ll only need worry about granting PlexMediaServer permission to read the media files

Secondary to that is what you show here.

Given your docker compose file is not using absolute pathnames, it’s uncertain what you’ve done as ./plex would normally be created as /./plex . The root (/) partition of all synology systems is only about 2.4 GB and will quickly overflow – creating problems.

If ./plex does end up as /volume1/./plex – that’s good.

To the errors you’re showing; EAE errors are almost always associated with inotify table overflow (the table fills but EAE needs 2 slots per transcode)

Give this a shot.
If you don’t have enough media to even worry about it (e.g. less than 8192 folders) then I very much suspect you’ve been overflowing the NAS OS partition (/) itself – You could ‘brick’ it — leading to a complete reinstall of DSM. (your media would be safe but all apps would get wiped)

@ChuckPa before I remove Plex from Docker, can you clarify the following two parts of your post? I’ll comment inline. I have a feeling I can fix this in the volumes: section of my docker-compose, but maybe you can confirm?

Given your docker compose file is not using absolute pathnames, it’s uncertain what you’ve done as ./plex would normally be created as /./plex . The root (/) partition of all synology systems is only about 2.4 GB and will quickly overflow – creating problems.

The path for this container is /volume2/docker/plex on an NVMe volume. Were you thinking I had installed Plex in the system directory? With that context in mind, what specific local folders should I list in my Plex install folder?

If ./plex does end up as /volume1/./plex – that’s good.

This one I’m not sure about. I’m guessing it means you hope that’s what I did, since otherwise I might have installed it in something like /etc or /var, in which case my NAS is about to crash?

Just for clarity, here’s my complete docker-compose. Thanks!

   plex:
    image: plexinc/pms-docker:public
    container_name: plex
    network_mode: host
    environment:
      - PUID=1028
      - PGID=100
    volumes:
      - ./plex:/config
      - ./plex:/tmp
      - /volume1/Media:/data
    restart: unless-stopped

Thanks for sharing.

To be specific,

    volumes:
      - ./plex:/config
      - ./plex:/tmp
      - /volume1/Media:/data

This is what bothers me.

  1. It’s clear that /volume1/Media (shared folder Media) → /data in the container.

  2. No idea where ./plex is on the host… to be used as /config in the container and used as /tmp in the container

:point_up: This is scary stuff because you’ve not anchored it with an absolute path on /volume1 or other /volume. By default, DSM is going to assume /

  1. Running as GID=100 (users) will not grant you access to HW transcoding if that’s something you want/need.

For containers I create, (example being one to run docker on DSM 7)
– which still requires the Plex native package installed in order to have HW transcoding privilege

This is a “docker run” sequence. Easily converted to a “docker compose”

sudo docker run \
-d \
--name plex \
--network=host \
-e PLEX_CLAIM="claim-J3YbuBpaBhE9oJS1jsma" \
-e TZ="EST5EDT" \
-e LANG="en_US.UTF-8" \
-e PLEX_UID=297536 \
-e PLEX_GID=297536 \
-e PUID=297536 \
-e PGID=297536 \
-h SynoDockerPlex \
-v /volume1/docker/SynoDockerPlex/config:/config \
-v /volume1/docker/SynoDockerPlex/tmp:/tmp \
-v /volume1/docker/SynoDockerPlex/transcode:/transcode \
-v /volume1:/volume1 \
-v /volume2:/volume2 \
--device=/dev/dri:/dev/dri \
plexinc/pms-docker:plexpass 

In this config:

  1. It runs as the PlexMediaServer username (matches the native package)
  2. It has specific “/volume1/docker” shared folder for all the metadata & tmp
  3. Has access to all of /volume1 and /volume2 for media (matches the native package)

Notice everything is locked down to definite paths.

To address this separately –

I’m the kind of guy who likes pathnames to be full paths.
I don’t like relative pathnames in system-global configuration files.
If you changed ./plex/volume2/docker/plex , which locks it down then I’d be more comfortable.

That said, if you’re all set with and have confirmed that – then I will back off.
I just don’t want you getting stuck in the position of dealing with a full root filesystem on DSM (pretty ugly stuff)

Using Docker is fine. The only question is whether or not you need HW transcoding ??

No problem. If someone installed an app in their system directory, that would be absolutely horrible.

I don’t need HW transcoding, so I took out the line you had for using the GPU. I added the following volumes with absolute paths (that was definitely my initial mistake):

volumes:
  - /volume2/docker/media-apps/plex/config:/config
  - /volume2/docker/media-apps/plex/tmp:/tmp
  - /volume2/docker/media-apps/plex/transcode:/transcode
  - /volume1/Media:/data

But, I’m having the same problem. The console is generating those transcode issues and this is in Container Manager:

Now I really am stumped, because I thought specifying a transcode folder would fix it.

I’m also wondering if Plex needs both /tmp and /transcode.

Error 13 = permission denied.

go to the ‘Codecs’ directory.

Find and delete anything with Easy in it.

[chuck@glockner Plex Media Server.2005]$ find . -name Easy\*
./Codecs/EasyAudioEncoder-1847-linux-x86_64.zip
./Codecs/EasyAudioEncoder-1978-linux-x86_64
./Codecs/EasyAudioEncoder-1978-linux-x86_64/EasyAudioEncoder
./Codecs/EasyAudioEncoder-1978-linux-x86_64/EasyAudioEncoder/EasyAudioEncoder

Make sure the container UID has R/W to the directory (might need check everything )

Restart PMS.

When you next use Dolby audio, it will download it again.

If you get the WAV file error, that’s inotify failing.
We can easily address that too

Yes it will need /tmp and a /transcode.

It could always break again, but if I’m guessing, it is now fixed 100%.

I couldn’t play anything before either and now I can (and no console errors).

You’ll know far more Linux than me since I just started, but maybe this is what happened:

  • I migrated my install, running the docker-compose to build the container and then stopping it to copy in my old library, re-add my media, etc.
  • I did run a chown -R docker:users /path/to/plex (that’s the only user that has rights to docker) and also a chmod -R a=,a+rX,u+w,g+w /path/to/plex after that, but for an unknown reason, that did not work on the codecs folder.
  • The relative paths were a bad idea on my part, but not the cause (it was EasyAudioEncoder getting trapped in a folder with the wrong permissions).

I’m learning with Linux that if something doesn’t work, it’s: 1) something I did, and 2) something I did with permissions.

Thanks for the patience!

Here’s what’s going on

  1. Most of the files are Read/write – owned by the “Plex” user (the UID/GID)
  2. EasyAccessEncoder is an executable program we license from Dolby.
  3. It must have ‘execute’ permission (so it can run).
  4. having set chmod -R a=,a+rX,u+w,g+w wasn’t quite enough.

I tend to use octal digits instead of the letters.

7=rwx (4+2+1)
6=rw- (4+2)
5=r-x (4+1)
4=r-- (4)

an executable program would be 755 (Owner = rwx, everyone else is r-x)

Upper case letters in permissions have special meaning … be careful of them

Here you can see: “755” permissions rwxr-xr-x

[chuck@glockner EasyAudioEncoder.2012]$ ll
total 2252
drwxr-xr-x 2 plex plex      65 Sep 20  2023 ./
drwxr-xr-x 3 plex plex      38 Sep 20  2023 ../
-rw-r--r-- 1 plex plex     134 Sep 20  2023 eae-license.txt
-rwxr-xr-x 1 plex plex 2297904 Sep 20  2023 EasyAudioEncoder*
[chuck@glockner EasyAudioEncoder.2013]$ 
[chuck@glockner EasyAudioEncoder.2013]$ 

This all takes time to learn.
I’ve been doing it since dirt was invented :slight_smile:

Thanks. Permissions have been the most confusing new area!

I thought this was fixed (I can play media and the console isn’t throwing errors), but now I have very high CPU use for Plex Transcoder, EasyAudioEncode and a few others. The console looks like this (I’d post the log but not sure which it is):

It’s late here, so I’m stopping the container so as to not thrash my CPU overnight. But, I’m now close to just installing the non-docker version of Plex on this NVMe!

nothing alarming in that snippet… but it’s just an activity snippet.

I don’t know what it should be doing nor do I see the “GET” statements where the player asks for the transcoded media data

Seeing the server DEBUG logs ZIP file which captures a playback with Dolby would help a great deal here.

A quick update. This morning I noticed you had written this. Based on your docker run example, I changed my /tmp and /transcode docker volumes to use the same folder in my Plex install directory (they had been separate):

volumes:
  - /volume2/docker/media-apps/plex/tmp:/tmp
  - /volume2/docker/media-apps/plex/tmp:/transcode

Then, I gave my docker user execute permissions to everything in my Plex folder recursively (I’m still crappy with chmod, so I did that in Synology DSM) … and restarted the container. No more high CPU use.

Probably only the second part did anything, but this does seem to be fixed now. Thank you again! Hopefully this helps future docker users who struggle with volume mapping.

One note, I got those chown and chmod commands from the Trash guides for Synology. It’s not the place to note this, but I’ve had to do a lot of fixing after using those guides.

@ChuckPa this started happening again and has been maddening. I did do a chmod -R 755 on the Plex install folder (and deleted EasyAudioEncoder), but that actually made Plex unable to read the folder, so I had to revert it. I don’t know if that’s some kind of Synology issue.

Permissions look like this:

drwxrwxr-x 1 docker users   538 May 30 23:48  Cache
drwxrwxr-x 1 docker users   138 May 30 23:42  Codecs
drwxrwxr-x 1 docker users   156 May 23 20:19 'Crash Reports'
drwxrwxr-x 1 docker users     0 Dec 31 11:20  Diagnostics
drwxrwxr-x 1 docker users    80 Dec 31 11:20  Drivers
drwxrwxr-x 1 docker users    44 May 23 20:17  @eaDir
drwxrwxr-x 1 docker users  3390 May 30 23:53  Logs
drwxrwxr-x 1 docker users    18 Dec 31 02:55  Media
drwxrwxr-x 1 docker users    28 Dec 31 02:56  Metadata
-rw-rw-r-- 1 docker users     3 May 30 23:40  plexmediaserver.pid
drwxrwxr-x 1 docker users     0 Dec 31 02:45  Plug-ins
drwxrwxr-x 1 docker users   100 Dec 31 02:46 'Plug-in Support'
-rw-rw-r-- 1   1000  1000  1089 May 30 23:40  Preferences.xml
drwxrwxr-x 1 docker users    34 Dec 31 14:35  Scanners
-rw-rw-r-- 1   1000  1000 12330 May 30 23:40 'Setup Plex.html'
drwxrwxr-x 1 docker users     0 Dec 31 02:45  Updates

As I mentioned, the docker:users setup comes from this guide.

The Plex docker-compose looks like this:

  plex:
    image: plexinc/pms-docker:public
    container_name: plex
    network_mode: host
    environment:
      - PUID=1028
      - PGID=100
      - PLEX_CLAIM=claimtoken
    volumes:
      - /volume2/docker/media-apps/plex/config:/config
      - /volume2/docker/media-apps/plex/tmp:/tmp
      - /volume2/docker/media-apps/plex/tmp:/transcode
      - /volume1/Media:/data
    restart: unless-stopped

I have a processes widget on a dashboard app and both Plex Transcode and EasyAudioEncode show near constant +100% CPU whenever Plex is running.

Any idea why that keeps happening? I’m stumped.

Look at what you’re showing me in the directory listing.

The ownership is wrong.

Preferences.xml should be owned , based on what you show me, by docker:users

If this is running on a Synology, users is GID=100, not 1000.

Your own compose file is telling me:

  1. PUID = 1028 is probably the UID of your Synology username (they start with 1026)
  2. PGID = 100 is the GID for “users” grou
  3. You have not added the HW passthrough if your machine has it.

I think you overapplied what I was telling you.
Part of that is my fault for not constraining what I was explaining.

FIRST, Let’s fix the permissions.

  1. Make certain it’s all stopped.
  2. SSH into the box: (Putty works well if using Windows computer)
  3. cd /volume1/docker/media-apps
  4. sudo bash
    – it will want your password here to elevate your privileges.
  5. chown -R docker:users ./plex ( docker:users owns everything )
  6. find ./plex -type d -exec chmod 755 {} \; (set permission in directories)
  7. find ./plex -type f -exec chmod 644 {} \; (set permission on files)
  8. Go into FileStation, Drill down into where EasyAccessEncoder is.
    – and delete it. PMS will download a fresh copy.

Now we have to add the HW passthrough if your machine has it:

  1. ls -la /dev/dri
    – If you see directory like this, you have HW capability
[chuck@lizum ~.2002]$ ls -la /dev/dri
total 0
drwxr-xr-x   3 root root        140 May 27 15:16 ./
drwxr-xr-x  21 root root       5500 May 29 20:13 ../
drwxr-xr-x   2 root root        120 May 30 12:44 by-path/
crw-rw----+  1 root render 226,   0 May 27 15:16 card0
crw-rw----+  1 root render 226, 128 May 27 15:16 renderD128
[chuck@lizum ~.2003]$

The compose file will need:

devices:
  -  /dev/dri:/dev/dri

The GID assigned to renderD128 is important.
Please share that directory listing with me.
We might need to adjust your container definition for it.

@ChuckPa many thanks. The 1000 permissions on those files must have been the result of a typo. It was late for me and I didn’t notice. Ugh.

Updates as follows.

Clarification: PUID = 1028 is the UID of the docker user, which can only access /volume2/docker and my media share.

Updates: I did your above and had the issue where the Plex container starts, but Plex won’t run.

Aaaand… I had misunderstood that. Plex was failing with this: Read/write access is required for path: /config/Library/Application Support/Plex Media Server but that’s a docker path. So I deleted the container and ran docker-compose again. Now that works and there are no more EAE issues.

I do have /dev/dri, which contains card0 and renderD128. The permissions are:

drwxr-xr-x  2 root root              80 May 29 23:26 .
drwxr-xr-x 15 root root           14520 May 29 23:26 ..
crw-------  1 root root        226,   0 May 29 23:26 card0
crw-rw----  1 root videodriver 226, 128 May 29 23:26 renderD1288

Let me know if I should add anything to allow hardware transcoding to work.

You can/should attempt to add docker to the videodriver line in /etc/group.

This is editing the system’s main group file.

DO NOT MESS IT UP!

It will look something like this when done.

videodriver:x:937:PlexMediaServer,docker

Just make certain docker is UID 1028 and you don’t make a security hole.

Should open /etc/group in vim? If so, there’s no line containing videodriver. Should I add it?

Also, I did nothing to the Plex folder, but the container became unhealthy and took down my NAS. I stopped the container and deleted it, gave /plex 755 and 644 again, deleted the codec, and built it again. And within 5 minutes it was maxing out EasyAudioEncode, Plex Transcoder, and Plex Media Fingerprinter like this whole thread never happened.

Plex in docker is on /volume2 (my NVMe drive) but that was thrashing my main volume. I’m attaching a console sample of what it was doing.

plex.log (4.9 KB)

Here are the current Plex folder permissions:

drwxr-xr-x 1 docker users   538 May 31 20:38  Cache
drwxr-xr-x 1 docker users    70 May 31 23:21  Codecs
drwxr-xr-x 1 docker users   156 May 23 20:19 'Crash Reports'
drwxr-xr-x 1 docker users     0 Dec 31 11:20  Diagnostics
drwxr-xr-x 1 docker users    80 Dec 31 11:20  Drivers
drwxr-xr-x 1 docker users    44 May 23 20:17  @eaDir
drwxr-xr-x 1 docker users  3390 May 31 08:35  Logs
drwxr-xr-x 1 docker users    18 Dec 31 02:55  Media
drwxr-xr-x 1 docker users    28 Dec 31 02:56  Metadata
-rw-r--r-- 1 docker users     3 May 31 08:35  plexmediaserver.pid
drwxr-xr-x 1 docker users     0 Dec 31 02:45  Plug-ins
drwxr-xr-x 1 docker users   100 Dec 31 02:46 'Plug-in Support'
-rw-r--r-- 1 docker users  1089 May 31 08:35  Preferences.xml
drwxr-xr-x 1 docker users    34 Dec 31 14:35  Scanners
-rw-r--r-- 1 docker users 12330 May 31 08:35 'Setup Plex.html'
drwxr-xr-x 1 docker users     0 Dec 31 02:45  Updates

All in all, this is now one of the ten most frustrating tech problems I’ve ever had and that includes Windows 98 bluescreens.

I’ve given an absolute ton of contextual info in this thread and you’ve been so, so patient, but I’m getting ready to give up on the idea of ever running Plex in Docker.

Need info here.

Also, FYI, that log you grabbed doesn’t contain anything useful.

When you say EAE was maxing out, do you mean your Plex logs are filled with No space left on device as PMS starts --OR-- EAE complains of “Wrong folder?”

===================================================

If a container becomes unhealthy (need clarification here) – and “took down my NAS”… What does that mean? It shutdown?

May I ask you to do the following:

  1. (re) start PMS
  2. Let it run 3 minutes – completely idle.
  3. Download the logs ZIP file (settings - server - troubleshooting - download logs)
  4. Attach the ZiP file it gives you here so I can see what’s happening.

Re: /etc/group

Let’s keep all that on hold until we have a stable PMS & machine.

Clarifications:

  • This issue manifests as PMS killing my CPU when I am not watching anything by repeatedly running EasyAudioEncode, Plex Transcoder, and Plex Media Fingerprinter. I have a running processes widget where I can watch that happen.

  • By “EAE was maxing out” I mean DSM stopped responding. I had to restart the NAS.

  • By “container becomes unhealthy” this is probably clear enough. In Container Manager, the volume is orange and a message that it’s unhealthy appears.

Since it’s this issue, today I can’t recreate it. I can watch stuff, idle, whatever, it’s all fine.

I prefer not to attach logs with my username and other stuff to a public thread but can DM you. But, your DMs are disabled.

At this point, if I don’t hear anything and this happens one more time, I’m just going to remove Plex from Docker and take it as a lesson learned.

@Krib

Check pm.