Sign inSign up

wjz304/kodi

By wjz304

Updated 23 days ago

适用于有显卡的 Linux server 主机,直接调用 drm 运行 kodi

Image
3

10K+

wjz304/kodi repository overview

Kodi Docker 镜像

简介

  • 基于 Ubuntu,集成 kodi(KMS/DRM 终端)及可选音频支持(PulseAudio/PipeWire)。
  • 适用于具备显卡的 Linux 服务器,直接通过 DRM 运行 kodi

主要环境变量

变量名说明示例
APP_COMMAND覆盖默认执行命令kodi-standalone
TZ时区Asia/Shanghai
LANG语言/区域zh_CN.UTF-8
LIBGL_ALWAYS_SOFTWARE强制软件渲染1
MESA_LOADER_DRIVER_OVERRIDE软件驱动swrast

构建镜像

docker build -t kodi:local kodi

运行示例

假设宿主机已具备显卡和音频后端(ALSA / PulseAudio / PipeWire),可根据实际环境调整参数。

直接运行
# ALSA 简单测试
docker run --rm \
  -e TZ=Asia/Shanghai -e LANG=zh_CN.UTF-8 \
  --device /dev/dri --device /dev/snd --device /dev/input --cap-add SYS_ADMIN --cap-add SYS_RAWIO \
  -v /run/udev:/run/udev:ro \
  -v /tmp/kodi:/root/.kodi \
  -p 8080:8080 -p 9090:9090 -p 7000:7000 -p 9777:9777/udp \
  kodi:local
# PulseAudio 简单测试
docker run --rm \
  -e TZ=Asia/Shanghai -e LANG=zh_CN.UTF-8 \
  --device /dev/dri --device /dev/input --cap-add SYS_ADMIN --cap-add SYS_RAWIO \
  -v /run/udev:/run/udev:ro \
  -e XDG_RUNTIME_DIR=/run/user/0 \
  -e PULSE_SERVER=unix:/run/user/0/pulse/native \
  -v /run/user/0/pulse/native:/run/user/0/pulse/native \
  -v /tmp/kodi:/root/.kodi \
  -p 8080:8080 -p 9090:9090 -p 9777:9777/udp \
  kodi:local
# PipeWire 简单测试
docker run --rm -it \
  -e TZ=Asia/Shanghai -e LANG=zh_CN.UTF-8 \
  --device /dev/dri --device /dev/input --cap-add SYS_ADMIN --cap-add SYS_RAWIO \
  -v /run/udev:/run/udev:ro \
  -e XDG_RUNTIME_DIR=/run/user/0 \
  -v /run/user/0/pipewire-0:/run/user/0/pipewire-0 \
  -v /run/user/0/pulse/native:/run/user/0/pulse/native \
  -v /tmp/kodi:/root/.kodi \
  -p 8080:8080 -p 9090:9090 -p 9777:9777/udp \
  kodi:local
root 用户下启动 PulseAudio(如需)

仅在确需 root 会话运行 PulseAudio 时:

sudo -i
usermod -a -G pulse-access root
gpasswd -a root pulse
gpasswd -a root pulse-access
sed -i 's/^ConditionUser=!root/#ConditionUser=!root/' /usr/lib/systemd/user/pulseaudio.* 2>/dev/null
sed -i 's/^ConditionUser=!root/#ConditionUser=!root/' /usr/lib/systemd/user/pipewire.* /usr/lib/systemd/user/pipewire-pulse.* 2>/dev/null
systemctl --user enable pulseaudio
systemctl --user start pulseaudio

UPnP/DLNA 与 AirPlay 投屏

  • Docker NAT/bridge 不转发组播包,AirPlay 依赖 mDNS/SSDP(UDP 5353/1900)与局域网广播,需使用 --network host 模式。

软件渲染(回退方案)

当硬件驱动不可用或 VA-API 初始化失败时,可通过以下变量回退到软件渲染(性能下降明显):

  • 设置 LIBGL_ALWAYS_SOFTWARE=1 使用软件渲染
  • 配合 MESA_LOADER_DRIVER_OVERRIDE=swrast 强制加载 swrast 驱动

注意事项

  • 确保 XDG_RUNTIME_DIR 与音频 socket 路径与宿主一致且容器有权限访问
  • 根据宿主硬件和驱动选择是否启用软件渲染,避免不必要的性能损失
docker-compose.xml
# version: "3.8"

services:
  kodi:
    build: .
    image: wjz304/kodi:latest
    container_name: kodi
    restart: unless-stopped
    # privileged: true             # 启用特权模式(可选, 注意安全风险)
    # tty: true                    # 分配伪终端
    # stdin_open: true             # 允许交互式终端
    environment:
      - TZ=Asia/Shanghai
      - LANG=zh_CN.UTF-8
      # - LIBGL_ALWAYS_SOFTWARE=1            # 强制使用软件渲染(可选)
      # - MESA_LOADER_DRIVER_OVERRIDE=swrast # 强制使用软件渲染(可选)
      # - XDG_RUNTIME_DIR=/run/user/1000     # PulseAudio/PipeWire 支持,需额外配置(可选)
    devices:
      - /dev/dri:/dev/dri          # 显卡直通 (必须)
      - /dev/snd:/dev/snd          # 声卡直通
      - /dev/input:/dev/input      # 输入设备直通(键盘、鼠标、遥控器等)
    volumes:
      - /run/udev:/run/udev:ro     # 使容器能读取设备信息(设备热插拔、输入设备、GPU/DRM 等元数据)
      - ./kodi:/root/.kodi         # Kodi 配置文件
      # - /run/user/1000/pulse/native:/run/user/1000/pulse/native # PulseAudio 支持,需额外配置(可选)
      # - /run/user/1000/pipewire-0:/run/user/1000/pipewire-0     # PipeWire 支持,需额外配置(可选)
    cap_add:
      - SYS_ADMIN                  # 允许使用 ioctl 等操作 DRM 设备
      - SYS_RAWIO                  # 允许直接访问硬件设备
    # network_mode: host           # 使用宿主网络模式 (可选,UPnP/DLNA 及 AirPlay 需要)
    ports:
      - 8080:8080                  # Web 远程控制端口
      - 9090:9090                  # JSON-RPC 远程控制端口
      - 9777:9777/udp              # Zeroconf/avahi 服务发现端口
    shm_size: "1gb"
    security_opt:
      - seccomp=unconfined

Tag summary

Content type

Image

Digest

sha256:bccc8707f

Size

570.7 MB

Last updated

23 days ago

docker pull wjz304/kodi