PlexIPTV
Docker app from Xiaodoudou's Repository
Overview
Readme
View on GitHubDocker
PlexIPTV is on Docker Hub as xiaodoudoufr/plexiptv, built for amd64 and arm64, so a Raspberry Pi on a 64-bit OS or an Apple Silicon Mac runs it natively. Every release publishes a new image.
Tags
| Tag | What you get |
|---|---|
latest |
The newest release, on Debian (node:26-bookworm-slim) |
1.6.2, 1.6 |
A given release, or the newest patch of a minor version |
alpine, 1.6.2-alpine, 1.6-alpine |
The same on Alpine (node:26-alpine), a smaller download |
Avoid the 1.0.x tags. They are from 2018 and miss nearly everything in the changelog.
Docker Compose
Make an empty folder, save this as docker-compose.yml in it (or download the same file from the repository), and change what you need:
PUIDandPGIDif 1000 is not the user who should own the config folder (99 and 100 on Unraid)TZto your time zone, such asEurope/Paris, so the log shows your local time./configif your settings should live somewhere else- the first
1234underportsif that port is already taken on the host
services:
plexiptv:
container_name: plexiptv
image: xiaodoudoufr/plexiptv:latest
restart: unless-stopped
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC
- PLEXIPTV_LOGDIR=/opt/PlexIPTV/config/logs
volumes:
- ./config:/opt/PlexIPTV/config
ports:
- "1234:1234"
Then start it from that folder:
docker compose up -d
docker run
The same without Compose:
docker run -d --name plexiptv --restart unless-stopped -p 1234:1234 -e TZ=Etc/UTC -v /path/to/config:/opt/PlexIPTV/config xiaodoudoufr/plexiptv
Swap /path/to/config for a folder of your own, such as /srv/plexiptv or C:\plexiptv on Windows.
Settings
| Variable | Default | What it does |
|---|---|---|
PUID, PGID |
1000 |
The user and group PlexIPTV runs as |
TZ |
Etc/UTC |
The time zone of the times in the log |
PLEXIPTV_LOGDIR |
/opt/PlexIPTV/logs |
Where logs.txt goes. Point it into the config folder to keep it, see logs |
PLEXIPTV_FFMPEG |
unset | none to never run ffmpeg, see ffmpeg |
| Path | What it holds |
|---|---|
/opt/PlexIPTV/config |
settings.json and the cached playlist |
| Port | What it serves |
|---|---|
1234 |
The tuner Plex talks to, the guide and the dashboard |
PlexIPTV runs as user and group 1000, never as root. To run it as someone else, set PUID and PGID, for example -e PUID=99 -e PGID=100 on Unraid. The container starts as root just long enough to hand the config folder to that user, so a folder you have not prepared, or one Docker created for you, works as it is.
First start
The first start writes a settings.json into the config folder and prints a password for the dashboard. It is printed once and never written to the log file, so read it now:
docker logs plexiptv
Then put your provider in settings.json (see where channels come from) and restart the container with docker restart plexiptv.
Adding it to Plex
Plex usually cannot discover a container on Docker's default network, because discovery relies on multicast, which does not reach it. Add the tuner by hand as an HDHomeRun at your-server:1234. If you published a different host port, use that one.
On Linux you can run with --network host instead, which lets discovery work. With Compose, that is network_mode: host in place of the ports section. Published ports are ignored in that mode, and the server listens on port 1234 of the host.
ffmpeg
Both images include ffmpeg, so RTSP channels and HLS with fragmented MP4 segments play with nothing extra to install, and a channel that cannot play shows the reason on screen. See streams and formats for when it is used. Set PLEXIPTV_FFMPEG=none if you would rather it never runs.
Logs
logs.txt is written inside the container, so it goes when the container is replaced. To keep it next to your settings, set PLEXIPTV_LOGDIR=/opt/PlexIPTV/config/logs, as the Compose example above does.
Updating
With Compose, from its folder:
docker compose pull
docker compose up -d
Without it:
docker pull xiaodoudoufr/plexiptv
docker rm -f plexiptv
Then run the same docker run command as before. Your settings and the cached playlist live in the config folder, so they carry over either way.
Building it yourself
From a clone of the repository, docker build -t plexiptv . builds the Debian image, and adding -f Dockerfile-alpine builds the Alpine one. Your own settings.json, playlist and logs are left out of the image by .dockerignore.
Apart from the dashboard, the server has no authentication, so keep it on a trusted network and do not forward its port to the internet. More in security.
Requirements
Download Statistics
Related apps
Explore more like this
Explore allDetails
xiaodoudoufr/plexiptv:latestRuntime arguments
- Web UI
http://[IP]:[PORT:1234]/dashboard- Network
bridge- Shell
sh- Privileged
- false
Template configuration
Plex reaches the tuner on this port, and the dashboard is at /dashboard on it. If you change it, add the tuner in Plex with the new port.
- Target
- 1234
- Default
- 1234
- Value
- 1234
settings.json, where your provider goes, and the cached playlist. Both are written on the first start.
- Target
- /opt/PlexIPTV/config
- Default
- /mnt/user/appdata/plexiptv
- Value
- /mnt/user/appdata/plexiptv
User PlexIPTV runs as. 99 is nobody, the usual owner of appdata. The container hands the config folder to this user when it starts.
- Default
- 99
- Value
- 99
Group PlexIPTV runs as. 100 is users.
- Default
- 100
- Value
- 100
Where logs.txt is written. Inside the config folder, so it survives updates.
- Target
- PLEXIPTV_LOGDIR
- Default
- /opt/PlexIPTV/config/logs
- Value
- /opt/PlexIPTV/config/logs