
elgeeko/roon-server本镜像提供 Docker 容器化的 Roon Server,用于构建个人音乐中心,支持本地音乐库管理、流媒体服务集成及多设备音频输出。通过 Docker 部署可实现环境隔离、简化安装流程,并确保跨平台一致性。
容器需访问主机音频设备,需先安装 ALSA 音频组件:
bashapt install alsa-utils libasound2 libasound2-data libasound2-plugins
创建 Docker 卷用于持久化 Roon Server 程序文件与配置:
bash# Roon Server 程序文件存储卷 docker volume create roon-server-data # 缓存与临时数据存储卷 docker volume create roon-server-cache
若需挂载本地音乐库,创建目录并确保权限:
bashmkdir -p ~/roon/music # 示例路径,可自定义
适用于大多数场景,支持全部功能:
bash# 获取音频组 GID(用于设备权限) AUDIO_GID=$(getent group audio | cut -d: -f3) # 启动容器(含本地音频支持) docker run \ --name roon-server \ --detach \ --volume roon-server-data:/opt/RoonServer \ # 程序文件持久化 --volume roon-server-cache:/var/roon \ # 缓存持久化 --volume ~/roon/music:/music:ro \ # 本地音乐库(可选,只读) --network host \ # Host 网络模式 --restart unless-stopped \ # 异常退出后自动重启 --volume /run/udev:/run/udev:ro \ # 监听 USB 设备变化 --device /dev/bus/usb \ # 映射 USB 总线 --device /dev/snd \ # 映射音频设备 --group-add "${AUDIO_GID:-29}" \ # 添加音频组权限 elgeeko/roon-server
bashdocker logs -f roon-server # 实时查看启动日志,确认服务正常运行
无本地音频支持(仅通过 RAAT 设备输出):
bashdocker run \ --name roon-server \ --detach \ --volume roon-server-data:/opt/RoonServer \ --volume roon-server-cache:/var/roon \ --volume ~/roon/music:/music:ro \ --network host \ --restart unless-stopped \ elgeeko/roon-server
带本地音频支持(如 USB DAC):
使用 4.1 中的完整命令,关键参数说明:
--volume /run/udev:/run/udev:ro:监听 USB 设备插拔事件--device /dev/bus/usb:允许访问 USB 设备--device /dev/snd:允许访问 ALSA 音频设备--group-add "${AUDIO_GID:-29}":添加音频组权限(默认 GID 29)通过 macvlan 为容器分配独立 IP,实现网络隔离(需有线网络,不支持 Wi-Fi)。
创建 macvlan 网络(替换为实际网络参数):
bashdocker network create \ --driver macvlan \ --subnet 192.168.1.0/24 \ # 本地子网(如 192.168.1.x) --gateway 192.168.1.1 \ # 网关 IP(路由器 IP) -o parent=eth0 \ # 主机网卡(如 eth0、enp0s3) roon-network # 网络名称(自定义)
启动容器(无本地音频):
bashdocker run \ --name roon-server \ --detach \ --volume roon-server-data:/opt/RoonServer \ --volume roon-server-cache:/var/roon \ --volume ~/roon/music:/music:ro \ --network roon-network \ # 使用创建的 macvlan 网络 --restart unless-stopped \ --ip 192.168.1.2 \ # 分配给容器的静态 IP elgeeko/roon-server
启动容器(带本地音频):
在上述命令基础上添加音频相关参数:
bashAUDIO_GID=$(getent group audio | cut -d: -f3) docker run \ ...(上述参数)... --volume /run/udev:/run/udev:ro \ --device /dev/bus/usb \ --device /dev/snd \ --group-add "${AUDIO_GID:-29}" \ elgeeko/roon-server
桥接模式默认不支持 RAAT 设备发现(需多播路由配置),仅推荐用于仅需主机本地音频输出的场景。需手动映射端口(参考 Dockerfile 源码),并配置主机防火墙。
确保容器命令包含以下参数(已在带音频支持的启动命令中集成):
--volume /run/udev:/run/udev:ro:监听 USB 设备变化--device /dev/bus/usb:USB 总线访问权限--device /dev/snd:ALSA 音频设备访问--group-add $(getent group audio | cut -d: -f3):音频组权限添加以下参数确保时区正确(如北京时间):
bash--env TZ=Asia/Shanghai \ # 设置环境变量 TZ --volume /etc/localtime:/etc/localtime:ro # 挂载主机时区文件
若设备无法发现 Roon Server 或音频输出异常,可添加以下参数诊断(逐步测试,定位问题后移除):
--cap-add SYS_ADMIN:授予系统管理权限(解决挂载/命名空间操作限制)--security-opt apparmor:unconfined:禁用 AppArmor 限制(解决设备/文件访问被拒)--privileged:特权模式(绕过所有隔离限制,仅用于诊断)--user root)。--ulimit nofile=8192。从源码构建镜像:
bashgit clone <镜像源码仓库> cd <仓库目录> docker build . -t elgeeko/roon-server

manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务