Contenedor
Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →
Imágenes de contenedor
Imagen oficial: jellyfin/jellyfin .
Esta imagen también se publica en GitHub Container Registry: ghcr.io/jellyfin/jellyfin.
Imagen de LinuxServer.io: linuxserver/jellyfin .
Imagen de hotio: ghcr.io/hotio/jellyfin.
Jellyfin distribuye imágenes oficiales de contenedor en Docker Hub y GitHub Container Registry para múltiples arquitecturas. Estas imágenes están basadas en Debian y construidas directamente desde el código fuente de Jellyfin.
Existen varias etiquetas disponibles que siguen diferentes compilaciones y niveles de versión.
-
latestsiempre sigue la última versión estable, incluyendo actualizaciones mayores y menores -
X(p. ej.10) sigue la versión principal, es decir, la última 10.Y.Z -
X.Y(p. ej.10.11) sigue la versión secundaria, es decir, la última 10.11.Z -
X.Y.Z(p. ej.10.11.0) sigue una versión específica -
X.Y.Z.YYYYMMDD-HHMMSS(p. ej.10.11.0.20251020-004604) sigue una compilación de empaquetado específica
Adicionalmente, existen varios terceros que proporcionan imágenes no oficiales de contenedor, incluyendo el proyecto LinuxServer.io (Dockerfile) y hotio (Dockerfile), que ofrecen imágenes basadas en Ubuntu y los paquetes binarios oficiales de Jellyfin para Ubuntu.
Instrucciones de instalación
Reemplaza uid:gid si deseas ejecutar jellyfin como un usuario/grupo específico. Omite completamente el argumento user si prefieres utilizar el usuario predeterminado.
- Docker
- Docker Compose
- Podman
Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →
Docker permite ejecutar contenedores en Linux, Windows y macOS.
Si deseas usar Windows o macOS, instala Jellyfin de forma nativa en su lugar. Windows macOS.
Aunque es posible ejecutar Jellyfin en Docker en equipos Windows o macOS, NO está soportado. Se sabe que algunas funciones fallan al ejecutarse en Docker en plataformas distintas a Linux, en particular:
- Transcodificación acelerada por hardware
- Escaneo en macOS con Docker
NO recibirás ningún soporte por ejecutar Jellyfin en Docker en plataformas distintas a Linux.
Los pasos básicos para crear y ejecutar un contenedor de Jellyfin usando Docker son los siguientes.
-
Descarga la imagen de contenedor más reciente.
docker pull jellyfin/jellyfin -
Crea almacenamiento persistente para datos de configuración y caché.
Puedes crear dos directorios en el host y usar montajes bind:
mkdir /path/to/config
mkdir /path/to/cacheO crear dos volúmenes persistentes:
docker volume create jellyfin-config
docker volume create jellyfin-cache -
Crea y ejecuta un contenedor de una de las siguientes formas.
El modo de red predeterminado en Docker es bridge. Se usará modo bridge si se omite el modo host.
El uso de red host (--net=host) es opcional pero necesario para utilizar DLNA.
Usando la interfaz de línea de comandos de Docker:
docker run -d \
--name jellyfin \
--user uid:gid \
-p 8096:8096/tcp \
-p 7359:7359/udp \
--volume /path/to/config:/config \ # Alternatively --volume jellyfin-config:/config
--volume /path/to/cache:/cache \ # Alternatively --volume jellyfin-cache:/cache
--mount type=bind,source=/path/to/media,target=/media \
--restart=unless-stopped \
jellyfin/jellyfin
Los Bind Mounts son necesarios para pasar carpetas del sistema operativo host al contenedor, mientras que los volúmenes son administrados por Docker y se consideran más fáciles de respaldar y controlar por programas externos. Para configuraciones simples, se considera más fácil usar Bind Mounts en lugar de volúmenes. Se pueden montar múltiples bibliotecas de medios si es necesario:
--mount type=bind,source=/path/to/media1,target=/media1
--mount type=bind,source=/path/to/media2,target=/media2,readonly
...etc
Opcionalmente se puede montar un directorio de fuentes del sistema del lado del servidor para usar estas fuentes durante la transcodificación con incrustación de subtítulos:
--mount type=bind,source=/path/to/fonts,target=/usr/local/share/fonts/custom,readonly
También se puede montar un directorio de fuentes de respaldo. En este caso, deberás configurar el directorio de fuentes de respaldo como /fallback_fonts en el panel de ajustes del servidor de Jellyfin:
--mount type=bind,source=/path/to/fallback/fonts,target=/fallback_fonts,readonly
Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →
Si deseas usar Windows o macOS, instala Jellyfin de forma nativa en su lugar. Windows macOS.
Aunque es posible ejecutar Jellyfin en Docker en equipos Windows o macOS, NO está soportado. Se sabe que algunas funciones fallan al ejecutarse en Docker en plataformas distintas a Linux, en particular:
- Transcodificación acelerada por hardware
- Escaneo en macOS con Docker
NO recibirás ningún soporte por ejecutar Jellyfin en Docker en plataformas distintas a Linux.
Crea un archivo docker-compose.yml como el siguiente.
services:
jellyfin:
image: jellyfin/jellyfin
container_name: jellyfin
# Optional - specify the uid and gid you would like Jellyfin to use instead of root
user: uid:gid
ports:
- 8096:8096/tcp
- 7359:7359/udp
volumes:
- /path/to/config:/config
- /path/to/cache:/cache
- type: bind
source: /path/to/media
target: /media
- type: bind
source: /path/to/media2
target: /media2
read_only: true
# Optional - extra fonts to be used during transcoding with subtitle burn-in
- type: bind
source: /path/to/fonts
target: /usr/local/share/fonts/custom
read_only: true
restart: 'unless-stopped'
# Optional - alternative address used for autodiscovery
environment:
- JELLYFIN_PublishedServerUrl=http://example.com
# Optional - may be necessary for docker healthcheck to pass if running in host network mode
extra_hosts:
- 'host.docker.internal:host-gateway'
Luego, estando en la misma carpeta que el docker-compose.yml, ejecuta:
docker compose up
Para ejecutar el contenedor en segundo plano, añade -d al comando anterior.
Puedes aprender más sobre Docker leyendo la documentación oficial de Docker.
Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →
Podman permite ejecutar contenedores sin privilegios de root. Los pasos para ejecutar Jellyfin con Podman son similares a los de Docker.
-
Instala Podman:
sudo dnf install -y podman -
Crea y ejecuta un contenedor de Jellyfin:
podman run \
--detach \
--label "io.containers.autoupdate=registry" \
--name myjellyfin \
--publish 8096:8096/tcp \
--publish 7359:7359/udp \
--rm \
--user $(id -u):$(id -g) \
--userns keep-id \
--volume jellyfin-cache:/cache:Z \
--volume jellyfin-config:/config:Z \
--mount type=bind,source=/path/to/media,destination=/media,ro=true,relabel=private \
docker.io/jellyfin/jellyfin:latest -
Abre los puertos necesarios en el firewall de tu máquina si deseas permitir acceso al servidor de Jellyfin desde fuera del host. Esto no se hace automáticamente al usar Podman sin root. Si tu distribución utiliza
firewalld, los siguientes comandos guardan y cargan una nueva regla de firewall que abre el puerto HTTP8096para conexiones TCP. Además, debe abrirse el puerto 7359 UDP para el descubrimiento automático.sudo firewall-cmd --add-port=8096/tcp --permanent
sudo firewall-cmd --add-port=7359/udp --permanent
sudo firewall-cmd --reload
Podman no requiere acceso root para ejecutar contenedores, aunque hay detalles importantes; consulta la documentación relevante.
Por seguridad, el contenedor de Jellyfin debe ejecutarse usando Podman sin root.
Además, es más seguro ejecutarlo como usuario no root dentro del contenedor.
La opción --user ejecutará con el ID de usuario y grupo proporcionados dentro del contenedor.
La bandera --userns keep-id asegura que el ID del usuario actual se mapee al ID del usuario no root dentro del contenedor.
Esto garantiza que los permisos de los directorios montados dentro del contenedor se mapeen correctamente entre el usuario que ejecuta Podman y el usuario que ejecuta Jellyfin dentro del contenedor.
Ten en cuenta que la bandera --label "io.containers.autoupdate=image" permitirá que el contenedor se actualice automáticamente mediante podman auto-update, y será necesario un respaldo para restaurar una versión anterior.
Las opciones de volumen z (volumen compartido) o Z (volumen privado) y la opción de montaje relabel=shared o relabel=private indican a Podman que reetiquete los archivos dentro de los volúmenes según corresponda, para sistemas que ejecutan SELinux.
Reemplaza jellyfin-config y jellyfin-cache con /path/to/config y /path/to/cache si prefieres usar montajes bind.
Este ejemplo monta tu biblioteca de medios en modo solo lectura configurando ro=true; cámbialo a ro=false si deseas dar permisos de escritura a Jellyfin sobre tus medios.
Managing via systemd
To run as a systemd service see podman-systemd.unit.
As always it is recommended to run the container rootless. Therefore we want to manage the container with the systemd --user flag.
-
Create a new user that the rootless container will run under.
useradd jellyfinThis allows users who are not logged in to run long-running services.
loginctl enable-linger jellyfinOpen an interactive shell session.
machinectl shell jellyfin@ -
Install
.config/containers/systemd/jellyfin.containerContents of
~/.config/containers/systemd/jellyfin.container[Container]
Image=docker.io/jellyfin/jellyfin:latest
AutoUpdate=registry
PublishPort=8096:8096/tcp
UserNS=keep-id
Volume=jellyfin-config:/config:Z
Volume=jellyfin-cache:/cache:Z
Volume=jellyfin-media:/media:Z
[Service]
# Inform systemd of additional exit status
SuccessExitStatus=0 143
[Install]
# Start by default on boot
WantedBy=default.target -
Reload daemon and start the service.
systemctl --user daemon-reloadsystemctl --user start jellyfin -
To enable Podman auto-updates, enable the necessary systemd timer.
systemctl --user enable --now podman-auto-update.timer -
Optionally check logs for errors
journalctl --user -u jellyfin -
exitthe current session.
Using hardware acceleration
To use hardware acceleration, you need to allow the container to access the render device. If you are using container-selinux-2.226 or later, you have to set the container_use_dri_devices flag in selinux or the container will not be able to use it:
sudo setsebool -P container_use_dri_devices 1
On older versions of container-selinux, you have to disable the selinux confinement for the container by adding --security-opt label=disable to the podman command.
Then, you need to mount the render device inside the container:
--device /dev/dri/:/dev/dri/
Finally, you need to set the --device flag for the container to use the render device:
--device /dev/dri/
Podman run example:
podman run \
--detach \
--label "io.containers.autoupdate=registry" \
--name myjellyfin \
--publish 8096:8096/tcp \
--device /dev/dri/:/dev/dri/ \
# --security-opt label=disable # Only needed for older versions of container-selinux < 2.226
--rm \
--user $(id -u):$(id -g) \
--userns keep-id \
--volume jellyfin-cache:/cache:Z \
--volume jellyfin-config:/config:Z \
--mount type=bind,source=/path/to/media,destination=/media,ro=true,relabel=private \
docker.io/jellyfin/jellyfin:latest
systemd example:
[Unit]
Description=jellyfin
[Container]
Image=docker.io/jellyfin/jellyfin:latest
AutoUpdate=registry
PublishPort=8096:8096/tcp
UserNS=keep-id
#SecurityLabelDisable=true # Only needed for older versions of container-selinux < 2.226
AddDevice=/dev/dri/:/dev/dri/
Volume=jellyfin-config:/config:Z
Volume=jellyfin-cache:/cache:Z
Volume=jellyfin-media:/media:Z
[Service]
# Inform systemd of additional exit status
SuccessExitStatus=0 143
[Install]
# Start by default on boot
WantedBy=default.target
Vendor-specific configuration
Additional configuration steps may be required depending on your GPU vendor. Check the Hardware Acceleration section.