Migrating Plex to Docker
Plex has been a staple of my homelab from the beginning. The appeal of having my own media server is what initially pushed me to build my very first home server utilizing spare gaming PC parts that I had lying around.
Since then, my lab has changed dramatically and my methods of handling my apps and services have, too. Gone are the days of installing a
.deb packages for everything and managing all sorts of dependencies. Generally, I now try to containerize any service I can due to the simple and portable nature of running containerized workloads.
That being said, containerizing my Plex instance was long overdue and, upon looking for documentation on the process, I found that there wasn't really much that exists in terms of documentation to follow. Today's write up will quickly cover the steps I took to migrate my existing Plex installation on Ubuntu 20.04 into a Docker container. With minor tweaks, this migration guide will also be relevant to many other methods or operating systems you might have used to originally install Plex, such as on a Synology device.
Before you begin the process of migrating your Plex instance, it is important to ensure you complete a couple of quick steps in preparation.
First, on the source instance, uncheck "Empty trash automatically after every scan"
Settings -> General, sign out of your server.
Next, shutdown your Plex instance in whatever manner is appropriate for your setup. For my instance that I installed using a
.deb package on Ubuntu, I used systemd and issued the following command:
systemctl stop plexmediaserver.service. To ensure your instance has stopped, you can then run
systemctl status plexmediaserver.service.
Migrating Your Plex Data
Once your source server has been stopped, you will now need to create a copy of your
Library directory. This is where all of your Plex data lives and we will simply copy it over to the new location where Docker container will reside.
For this example, we will use the path of
/home/<your_user_here>/docker/plex/config. While you can really run the docker container anywhere, your
Library file needs to live within a directory called
config that the docker-compose file will ultimately end up looking for.
To copy the data, I issued the command
cp -R /var/lib/plexmediaserver/Library /home/tcude/docker/plex/config. After issuing this command, you will likely have to wait a bit as the large directory is copied over. Mine ended up being about 24 gigabytes in size.
Once done, my setup looked something like this:
[email protected]:~/docker/plex$ ls -l total 4 drwxr-xr-x 3 tcude tcude 4096 Feb 7 02:15 config [email protected]:~/docker/plex$ ls -l config/ total 4 drwxr-xr-x 3 tcude tcude 4096 Feb 7 02:15 Library
Creating the Container
Now that you have migrated your Plex data to the new container directory, it is time to create the container, itself.
To do this, I utilized Docker Compose, and created a file called
/home/tcude/docker/plex that contains the following:
version: "2.1" services: plex: image: lscr.io/linuxserver/plex:latest #image: plexinc/pms-docker container_name: plex network_mode: host environment: - PUID=1000 - PGID=1000 - VERSION=docker - PLEX_CLAIM=paste_your_claim_code_here volumes: - ./config:/config - /mnt/library/tv:/tv - /mnt/library/movies:/movies devices: - /dev/dri:/dev/dri restart: unless-stopped
If you are using Intel QuickSync, you can pass through your device in the
devices section, shown above. If this is not relevant to you, you can simply comment out or delete this section
Starting up the Container
As a final step before running
docker compose up -d to bring your container up, I suggest visiting https://plex.tv/claim to get a claim code. This claim code can then be placed in your docker-compose file in the appropriate section, shown above. It is worth noting that they are only valid for a few minutes.
You are now able to proceed with starting up Plex within Docker. To do this, simply run
docker compose up -d.
Once done navigate to the Plex web interface for your new instance which can be found on https://your_device_ip:32400/web
From here, you will go through some setup steps. At this point, you might notice that Plex is showing that you have two servers under your account, with one of them being offline. This is normal and Plex will remove your old server pretty quickly on its own.
Here is an example of what I ran into.
Now that your new container is up and running, there are a few important steps remaining.
First, within the web interface, start by going to
Settings -> Manage -> Libraries and update the paths to your media. If you followed my docker compose file, these will simply be
/movies for their respective libraries.
Empty trash automatically after every scan, that you previously disabled in an earlier step.
Finally, as the last steps, you will need to
Clean Bundles, and
Optimize Databases, as shown below. It is worth noting that it is likely best to wait a few minutes between clicking on each of these.
With that, you should now have successfully migrated your Plex installation into a Docker container and are able to take advantage of the many benefits that a containerized workload has to offer.
While you're here, you might find this related article helpful:
Please consider checking out my other articles and subscribing to my site and/or RSS feed to see future posts: