
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
!!!
现在有一个新镜像https://hub.docker.com/r/shiomax/jrivermc%E5%8F%AF%E7%94%A8%EF%BC%8C%E5%B0%86%E6%9C%89%E6%95%88%E6%9B%BF%E4%BB%A3%E6%AD%A4%E9%95%9C%E5%83%8F%E3%80%82%E5%AF%B9%E4%BA%8E%E6%96%B0%E5%AE%89%E8%A3%85%EF%BC%8C%E5%BB%BA%E8%AE%AE%E7%AB%8B%E5%8D%B3%E4%BD%BF%E7%94%A8%E6%96%B0%E9%95%9C%E5%83%8F%EF%BC%8C%E5%9B%A0%E4%B8%BA%E6%AD%A4%E9%95%9C%E5%83%8F%E6%9C%80%E7%BB%88%E5%B0%86%E5%81%9C%E6%AD%A2%E7%BB%B4%E6%8A%A4/%E6%9E%84%E5%BB%BA%E3%80%82
!!!
这是一个社区构建的JRiver Media Center Docker镜像。镜像基于https://github.com/jlesage/docker-baseimage-gui%E6%9E%84%E5%BB%BA%E3%80%82
源代码可在gitlab.com获取。
它旨在用作中央"headless" JRiver服务器,您可以通过其他任何JRiver实例从中流式传输音乐。
可以设置从容器直接播放音乐,但依赖于主机上运行的alsa(请参见声音部分)。
| JRiver版本 | 仓库 | 仍在重建 |
|---|---|---|
| Media Center 30 | https://hub.docker.com/r/shiomax/jrivermc30 | 是 |
| Media Center 29 | https://hub.docker.com/r/shiomax/jrivermc29 | 是 |
| Media Center 28 | https://hub.docker.com/r/shiomax/jrivermc28 | 是 |
| Media Center 27 | https://hub.docker.com/r/shiomax/jrivermc27 | 否 |
| Media Center 26 | https://hub.docker.com/r/shiomax/jrivermc26 | 否 |
| Media Center 25 | https://hub.docker.com/r/shiomax/jrivermc25 | 否 |
| Media Center 24 | https://hub.docker.com/r/shiomax/jrivermc24 | 否 |
!screenshot
关于network_mode设置的注意事项 大多数情况下,建议使用host网络。除非您需要更改端口映射,因为某些端口可能已被主机使用。如果使用桥接网络,会有一些注意事项。首先,您需要定义自定义MAC地址,否则JRiver实例将频繁激活,因为其许可证不允许MAC地址更改。另外,我注意到桥接网络下网络发现不太正常,这意味着其他JRiver实例可能无法将此Docker容器发现为一个区域。
推荐使用docker-compose。使用docker-compose时,您将创建一个配置文件docker-compose.yml,其中包含容器的所有配置。这使得使用完全相同的配置重新创建容器变得更加容易。例如,当您想要更改正在使用的镜像版本时,您需要销毁并重新创建容器。如果不使用docker-compose,您需要记住使用的确切docker run命令,以便使用相同的配置重新创建容器。
桥接网络(默认)
ymlversion: '3' services: jrivermc28: image: shiomax/jrivermc28 restart: always container_name: jrivermc28 mac_address: ed:e8:60:2d:65:c1 ports: - "5800:5800" - "5900:5900" - "52100:52100" - "52101:52101" - "52199:52199" - "1900:1900/udp" environment: - VNC_PASSWORD=12345 volumes: - /path/to/config:/config:rw - /path/to/music:/data/music:rw
或使用主机网络:
ymlversion: '3' services: jrivermc28: image: shiomax/jrivermc28 restart: always container_name: jrivermc28 network_mode: host environment: - VNC_PASSWORD=12345 volumes: - /path/to/config:/config:rw - /path/to/music:/data/music:rw
运行容器:docker-compose up -d
更新容器:
docker-compose pull 拉取compose文件中指定的最新镜像docker-compose down 停止并删除容器(假设已挂载/config卷,数据不会丢失)docker-compose up -d 创建容器并后台运行docker image prune 清理未使用的镜像桥接网络(默认)
shdocker run -d \ --name=jrivermc28 \ --net=bridge \ --restart=always \ --mac-address=ed:e8:60:2d:65:c1 \ -p 5800:5800 \ -p 5900:5900 \ -p 52199:52199 \ -p 52101:52101 \ -p 52100:52100 \ -p 1900:1900/udp \ -v config:/config:rw \ -v /path/to/music:/data/music:rw \ -e VNC_PASSWORD=12345 \ shiomax/jrivermc28
或使用主机网络:
shdocker run -d \ --name=jrivermc28 \ --net=host \ --restart=always \ -v config:/config:rw \ -v /path/to/music:/data/music:rw \ -e VNC_PASSWORD=12345 \ shiomax/jrivermc28
更新容器:
docker pull shiomax/jrivermc28:latest 拉取带有latest标签的新镜像docker rm -f jrivermc28 停止并删除名称为jrivermc28的容器docker run -d .... 重新运行最初创建容器时使用的完整run命令docker image prune 清理未使用的镜像shiomax/jrivermc28:latest
使用来自'latest'仓库的JRiver版本(这也是不指定任何标签时的默认值)
shiomax/jrivermc25:stable
使用来自'stable'仓库的JRiver版本,其他方面相同
类似25.0.83-latest-1、25.0.50-stable-1、25.0.80-latest-0这样的标签
这些是当时stable和latest标签的副本。如果新版本镜像出现问题,您可以使用这些标签回退。这些镜像只推送一次,之后不再更新。标签包含JRiver版本(25.0.83)、JRiver仓库(latest)和镜像版本(1)。
卷:
/config 这是容器的主目录,一定要将其挂载到外部目录,以便正确持久化您的设置等。您的库备份也将保存在这里。只要您有这个文件夹,就可以随意销毁和重新创建容器,JRiver(应该)会恢复到原来的状态。如果没有这个文件夹并且删除了容器,那么您所做的一切都将丢失。对于临时安装(测试目的),不挂载它也可以。/data/music 您可以将音乐挂载到/data/music。您也可以使用任何其他文件夹来挂载媒体。如果不知道放在哪里,只需使用/data/music即可。端口映射:
您可以在主机和容器之间映射alsa声音设备/dev/snd,以启用从容器内播放声音。
使用docker run命令时,添加选项--device /dev/snd。
使用docker compose时,在docker-compose.yml中添加以下内容:
ymldevices: - "/dev/snd"
注意:7版本之前不支持此功能。
您可以通过Web浏览器或VNC客户端访问GUI。
假设您没有重新映射端口:
http://<主机IP地址>:5800
SECURE_CONNECTION时)https://<主机IP地址>:5800
<主机IP地址>:5900
SECURE_CONNECTION时)<主机IP地址>:5900
注意:您需要支持SSL加密的VNC客户端,例如SSVNC。当您打开SECURE_CONNECTION标志时,许多VNC客户端将无法工作。
如果密钥由于任何原因无法工作,您可以从[***]
docker exec -it <container_name> /bin/bashexport HOME=/config mediacenter28 /RestoreFromFile /config/<mjr_file_name>
注意: 在撰写本文时,如果MC正在运行,/RestoreFromFile命令将无法工作。运行该命令只会杀死MC,但激活会失败。如果容器因任何原因退出,MC会自动启动。如果您至少使用镜像的16版本,可以通过在创建容器时将BLOCK_MC_STARTUP设置为1,或在运行的容器内使用touch /tmp/BLOCK_MC_STARTUP并随后关闭MC来阻止MC启动。删除该文件将允许MC再次启动(rm /tmp/BLOCK_MC_STARTUP)。在尝试激活MC之前执行此操作。
如果在容器中遇到权限问题且无法访问媒体,有多种解决方法。
更改音乐文件夹的权限和/或所有权是一种方法。但您也可以通过更改GROUP_ID和USER_ID环境变量来更改JRiver在容器内运行的用户。
这两个是数值,默认值为1000,在通用Linux安装中,这是您创建的第一个用户的ID。如果您的音乐文件夹属于另一个用户,可以更改这些值。
ls -la /path/to/music
id <username>
使用docker-cli:
shdocker run -d \ --name=jrivermc28 \ --net=host \ --restart=always \ -v config:/config:rw \ -v /path/to/music:/data/music:rw \ -e USER_ID=1234 \ -e GROUP_ID=1234 \ -e VNC_PASSWORD=12345 \ shiomax/jrivermc28
使用docker-compose:
ymlversion: '3' services: jrivermc28: image: shiomax/jrivermc28 restart: always container_name: jrivermc28 network_mode: host environment: - VNC_PASSWORD=12345 - USER_ID=1234 - GROUP_ID=1234 volumes: - /path/to/config:/config:rw - /path/to/music:/data/music:rw
这通常只在使用主机网络时需要。默认情况下,桥接网络不需要任何防火墙配置。因为安装docker时,docker-proxy已经被允许通过。
sudo su(所有这些操作都需要root权限,或者不使用su并在每个命令前加上sudo)nano /etc/firewalld/services/jriver.xml<?xml version="1.0" encoding="utf-8"?> <service> <short>jriver</short> <description>Ports required by JRiver MediaCenter.</description> <port protocol="tcp" port="5800"></port> <port protocol="tcp" port="52199"></port> <port protocol="tcp" port="52100"></port> <port protocol="tcp" port="52101"></port> <port protocol="tcp" port="5900"></port> <port protocol="udp" port="1900"></port> </service>
firewall-cmd --reloadfirewall-cmd --add-service=jriver --zone=publicfirewall-cmd --add-service=jriver --zone=public --permanentfirewall-cmd --reloadsudo su或在debian上使用su(所有这些操作都需要root权限,否则在每个命令前加上sudo)nano /etc/ufw/applications.d/jriver[jriver] title=jriver description=Ports required by JRiver MediaCenter ports=5800,52199,52100,52101,5900/tcp|1900/udp
ufw app update jriver,之后可以使用ufw app info jriver检查配置ufw allow jriver注意:仅适用于高级用户。
在启动时运行自定义初始化逻辑的好方法是编写一个初始化脚本并将其挂载到/etc/cont-init.d。您可以执行任何操作,例如安装其他软件包或修复损坏的内容。但是,如果您进行的更改可以帮助其他镜像用户,我鼓励您尝试提交这些更改(在gitlab.com上创建合并请求),以便这些更改对所有人可用,而不仅仅是您自己。
/etc/cont.init.d中的脚本在容器启动时按前面的数字顺序执行。例如,10-max-popup.sh当前如下所示:
#!/usr/bin/with-contenv sh set -e # 如果命令以非零状态退出,则立即退出。 set -u # 将未设置的变量视为错误。 log() { echo "[cont-init.d] $(basename $0): $*" } if [ "$MAXIMIZE_POPUPS" = "1" ]; then log "Applying max popup config to openbox." sed -i '/<\/applications>/{ r /templates/max-popups.xml a \</applications> d }' /etc/xdg/openbox/rc.xml else log "Popups won't be maximized" fi;
这没什么特别的,只是在openbox配置中应用更改,使弹出窗口全屏显示。您可以使用这些脚本做任何事情。编写它们,然后像挂载其他文件一样将它们挂载到容器中,就像挂载音乐目录一样。现在您只需挂载单个文件。我建议在前面使用大数字(如100),以便您的脚本在所有其他初始化逻辑之后运行。
特定于此镜像的环境变量:
| 变量 | 描述 | 默认值 |
|---|---|---|
MAXIMIZE_POPUPS | 设置为1时最大化MC弹出窗口。 | 0 |
BLOCK_MC_STARTUP | 设置为1时,MC将被阻止启动,直到/tmp/BLOCK_MC_STARTUP被删除。 | ` |
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务