2026/8/19 10:44:03

Sunshine 游戏串流服务 Docker 部署全攻略:一条命令让 Moonlight 串流稳定跑起来

Sunshine 游戏串流服务 Docker 部署全攻略:一条命令让 Moonlight 串流稳定跑起来 Sunshine 游戏串流服务 Docker 部署全攻略一条命令让 Moonlight 串流稳定跑起来【免费下载链接】SunshineSelf-hosted game stream host for Moonlight.项目地址: https://gitcode.com/GitHub_Trending/su/SunshineSunshine 是自托管的开源游戏串流服务端负责捕获宿主机画面、调用 GPU 硬件编码并把低延迟画面推送给任意平台的 Moonlight 客户端。本文用一条可复制的路径带你完成 Docker 化部署——省去源码编译与依赖折腾从拉镜像到配对客户端全程有手就能跟下来。先回答一个问题为什么非要用容器部署它裸机装 Sunshine 最磨人的不是软件本身而是它背后那一长串隐性依赖FFmpeg、各类编码器接口、虚拟手柄驱动、CUDA/VAAPI 运行时……版本稍有出入编译就是一场灾难。更别提 AMD、Intel、Nvidia 三家的驱动行为各不相同同一套源码换个显卡就要重新调参。容器方案把这些一次性打包进镜像拉取即用、换机即移、回滚版本就像切换标签一样简单。镜像内的构建产物与系统环境已经过官方验证你只需关注三件事——配置怎么挂、设备怎么通、端口怎么放。动手前花两分钟过一遍自检清单部署失败九成发生在环境不在命令。开始之前先逐项确认主机架构是 x86_64 还是 arm64决定镜像后缀选择Docker 已安装守护进程正常运行GPU 驱动已装好/dev/dri渲染节点存在串流端口 47984–47990、48010、47998–48000 未被占用准备好一个独立目录存放配置如/srv/sunshine用下面三条命令快速体检ls -l /dev/dri # 存在 renderD128 等节点说明显卡可直通 docker --version # 确认 Docker 可用 ss -tuln | grep -E 4798|4799|48010 # 有输出说明端口被占需先处理五分钟跑起第一版最小化启动命令拆开看先别碰复杂编排用一条docker run让服务先活起来逐行注释如下docker run -d \ --name sunshine \ # 容器命名便于管理 --restartunless-stopped \ # 异常退出自动拉起 --ipchost \ # 共享宿主机内存避免解码缓冲不足 --device /dev/dri/ \ # 把显卡渲染节点直通进容器 -e PUID1000 -e PGID1000 \ # 容器内用户/组 ID对齐宿主机 -e TZAsia/Shanghai \ # 时区影响日志时间 -v /srv/sunshine:/config \ # 配置持久化到宿主机目录 -p 47984-47990:47984-47990/tcp \ # 控制、RTSP 与 Web 管理端口 -p 48010:48010 \ # 辅助端口 -p 47998-48000:47998-48000/udp \ # 视频流 UDP 端口 lizardbyte/sunshine:latest-ubuntu-24.04 # 镜像标签规则见后文看到容器状态为Up后浏览器打开http://宿主机IP:47990出现欢迎页即部署成功。到这里你已经拿到了一个能用的串流服务剩下的都是让它更好用、更稳的功课。Docker、Compose、Podman 三种姿势横向对比按使用场景选型别照搬别人的模板方式适合谁一句话点评docker run快速验证、临时使用一条命令缺点是不便维护Docker Compose长期运行、想留存配置配置即代码换机一键复现Podman无 root 权限、云原生环境兼容 docker CLI进程级隔离长期跑服务推荐 Compose创建docker-compose.ymlservices: sunshine: image: lizardbyte/sunshine:latest-ubuntu-24.04 # 固定组合标签 container_name: sunshine restart: unless-stopped # 开机自启 崩溃自愈 ipc: host # 共享内存 devices: - /dev/dri:/dev/dri # 显卡直通 environment: - PUID1000 # 与宿主目录属主一致 - PGID1000 - TZAsia/Shanghai volumes: - /srv/sunshine:/config # 配置持久化 ports: - 47984-47990:47984-47990/tcp - 48010:48010 - 47998-48000:47998-48000/udp在文件目录执行docker compose up -d即可。Podman 用户则把--ipchost换成--usernskeep-id其余参数与docker run完全一致——这也是无 root 容器下保持文件属主正常的关键差异。五维配置心智地图端口、存储、直通、权限、时区一次理清 端口维度47990 是 Web 管理界面端口对外可以改映射如8080:47990但容器内部必须保持 47990其余串流端口建议原样完整映射缺一个都可能连不上或花屏。 存储维度/config保存全部配置与配对凭据务必挂载到宿主机目录。配置丢失等于重新部署一遍定期备份这个目录就够了。️ 直通维度/dev/dri提供硬件编码能力--ipchost让编码缓冲使用宿主机共享内存画面卡顿时优先检查这两项。 权限维度先用id命令查你的用户 ID让 PUID/PGID 与配置目录属主一致否则容器内进程写不进配置id # 例如输出 uid1000(user) gid1000(user) chown -R 1000:1000 /srv/sunshine # 目录属主对齐 时区维度不设 TZ 默认是 UTC日志与串流时间戳会差八小时排查问题时分外痛苦建议开箱就设。部署完成后Web 界面内置搜索框能帮你快速定位任意配置项例如网络相关的 UPnP 设置我踩过的四个坑替你提前排雷坑一编码器 not found画面永远推不出去。症状是客户端连上了但黑屏。根因通常是--device /dev/dri/漏加或主机驱动太旧导致 VAAPI 不可用。先ls /dev/dri确认设备再去日志页核对编码器加载情况。坑二改完配置一重启就回到解放前。多半是配置目录属主与 PUID 不一致容器内无写权限修改被静默丢弃。按上文chown对齐即可。坑三47990 被局域网其他服务占用。映射到别的宿主机端口即可但注意改完后管理地址也跟着变别对着旧地址抓耳挠腮。坑四串流偶发卡顿、掉帧。优先怀疑--ipchost被漏掉——共享内存不足时编码器会悄悄降级表象就是偶发卡顿。遇到任何异常先开 Web 界面的日志页它会直白地告诉你编码器、网络、权限各环节的真实状态生产化三件事固定版本、看懂标签、控制资源从 v0.18.0 起镜像不再提供简单的latest单标签必须使用版本-操作系统的组合例如latest-ubuntu-24.04、v0.24.0-debian-bookworm也可以用具体 commit hash 锁定构建。支持的操作系统后缀包括 debian-bookworm、ubuntu-22.04、ubuntu-24.04均覆盖 x86_64 与 arm64 两种架构。生产环境请固定到具体版本号避免某天拉到一个行为变更的新镜像。若想二次开发或自建镜像项目提供了完整的多阶段构建流程参考 docker/ubuntu-24.04.dockerfile需要源码时执行git clone https://gitcode.com/GitHub_Trending/su/Sunshine另外建议在 Compose 里追加mem_limit、cpus等资源约束防止高负载编码时拖垮宿主机上的其他服务。部署只是起点接下来按这三步走配对客户端在 Moonlight 任意客户端输入 Web 页面显示的 PIN 码完成绑定。添加串流目标在 Applications 页签把 Steam、桌面或自定义应用加进列表之后即可一键开串按需深入官方文档 docs/getting_started.md 讲启动配置docs/performance_tuning.md 讲延迟调优DOCKER_README.md 整理了完整的端口与参数清单串流效果不佳时优先翻这几份。把服务跑起来只是第一步真正的乐趣在于调出局域网里感觉不到延迟的手感。祝你在自己的客厅里用 Sunshine 打开一扇通往任意设备的大屏游戏之门。【免费下载链接】SunshineSelf-hosted game stream host for Moonlight.项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考