Jellyfin is a Free Software Media System that puts you in control of managing and streaming your media. It is an alternative to the proprietary Emby and Plex, to provide media from a dedicated server to end-user devices via multiple apps. Jellyfin is descended from Embyβs 3.5.2 release and ported to the .NET Core framework to enable full cross-platform support. There are no strings attached, no premium licenses or features, and no hidden agendas: just a team who want to build something better and work together to achieve it.
This clion/jellyfin docker image provides a better alternative to the official Jellyfin container. Itβs built on the latest Alpine Linux, offering a smaller footprint while fixing FFmpeg decoding issues, hardware acceleration support, and Chinese character display problems. The image automatically updates when new Jellyfin versions are released.
http://<your-ip>:8096
Hardware acceleration significantly improves transcoding performance. While not strictly required, itβs highly recommended for optimal media streaming experience.
Mount the /dev/dri
device into the container:
--device=/dev/dri:/dev/dri
The container automatically configures proper permissions for the jellyfin user to access these devices.
You can deploy this container using either docker-compose (recommended) or the docker CLI.
services:
jellyfin:
container_name: Jellyfin
image: registry.cn-chengdu.aliyuncs.com/clion/jellyfin:latest
environment:
- UMASK=022
- PUID=1000
- PGID=1000
- TZ=Asia/Shanghai
- JELLYFIN_PublishedServerUrl=192.168.0.5 #optional
ports:
- 8096:8096
- 8920:8920 #optional
- 7359:7359/udp #optional
- 1900:1900/udp #optional
volumes:
- /etc/localtime:/etc/localtime:ro
- /path/to/jellyfin/library:/config
- /path/to/media:/media/nas
devices:
- /dev/dri:/dev/dri #optional - for hardware transcoding
restart: unless-stopped
docker run -d \
--name=Jellyfin \
-e UMASK=022 \
-e PUID=1000 \
-e PGID=1000 \
-e TZ=Asia/Shanghai \
-e JELLYFIN_PublishedServerUrl=192.168.0.5 `#optional` \
-p 8096:8096 \
-p 8920:8920 `#optional` \
-p 7359:7359/udp `#optional` \
-p 1900:1900/udp `#optional` \
-v /path/to/config:/config \
-v /path/to/media:/media/nas \
-v /etc/localtime:/etc/localtime:ro \
--device=/dev/dri:/dev/dri `#optional - for hardware transcoding` \
--restart unless-stopped \
registry.cn-chengdu.aliyuncs.com/clion/jellyfin:latest
Containers are configured using parameters passed at runtime. These parameters are separated by a colon and indicate <external>:<internal>
respectively. For example, -p 8080:80
would expose port 80 from inside the container to be accessible from the hostβs IP on port 8080.
| Parameter | Function |
| :β-: | β |
| -p 8096:8096
| Primary HTTP web interface |
| -p 8920:8920
| HTTPS web interface (requires your own certificate) |
| -p 7359:7359/udp
| Allows clients to discover Jellyfin on the local network |
| -p 1900:1900/udp
| Service discovery used by DLNA and clients |
| Parameter | Function |
| :β-: | β |
| -e PUID=1000
| User ID for container user (see User/Group section below) |
| -e PGID=1000
| Group ID for container user (see User/Group section below) |
| -e TZ=Asia/Shanghai
| Specify timezone |
| -e UMASK=022
| Control permission bits for newly created files (see Umask section) |
| -e JELLYFIN_PublishedServerUrl=192.168.0.5
| Set the autodiscovery response domain or IP address |
| Parameter | Function |
| :β-: | β |
| -v /config
| Jellyfin data storage location (can grow very large, 50GB+ for large collections) |
| -v /media/nas
| Media location. Add as many as needed (e.g., /media/nas/movies, /media/nas/tv) |
| Parameter | Function |
| :β-: | β |
| --device=/dev/dri:/dev/dri
| For Intel/AMD GPU hardware acceleration |
For optimal performance with large media libraries:
--memory=4g --memory-swap=6g
Storage Performance: Mount configuration and media directories on high-performance storage
--network=host
This image provides the ability to override default permission settings using the optional -e UMASK=022
parameter. Remember that umask subtracts from permissions based on its value; it does not add permissions.
When using volumes, permission issues can arise between the host OS and the container. To avoid this, specify the user PUID and group PGID.
Ensure any volume directories on the host are owned by the same user you specify, and permission issues will be resolved automatically.
JELLYFIN_PublishedServerUrl
environment variable