如何快速完成 Sunshine 的 Docker 容器化部署:面向新手的完整指南
【免费下载链接】SunshineSelf-hosted game stream host for Moonlight.项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine
Sunshine 是一款开源的自建游戏串流服务端,配合 Moonlight 客户端即可把电脑上的游戏画面带到任意设备;而借助 Docker 容器化部署,你可以在十几分钟内完成安装、配置与上线,省去手工编译和依赖折腾,把精力留给真正的游戏体验。
部署前的环境准备:前置检查清单与三个关键概念
动手敲命令之前,建议先花两分钟对照下面的检查项确认环境。四项全部通过,后面的流程基本不会踩坑。
- 操作系统与内核:Docker 容器化部署需要 64 位 Linux 主机,建议内核 5.10 以上;老内核对 GPU 直通的支持较差。Windows、macOS 上的 Docker Desktop 虽然也能运行,但显卡透传效果不稳定,不推荐用于游戏串流。
- 容器引擎版本:Docker 建议 20.10 及以上,可用
docker --version确认;习惯 Podman 的用户需要 4.0 以上的版本。 - GPU 与渲染设备:串流质量依赖硬件编码。请确认
/dev/dri目录存在(对应 Intel/AMD 显卡),或 NVIDIA 驱动已正确安装。 - 端口占用:Sunshine 需要一组连续的端口,启动前先确认 47984–48010 区间没有被其他服务占用。
三个需要先理解的关键概念
- 镜像标签(Tag):可以理解为镜像的"版本编号"。从 v0.18.0 起,Sunshine 取消了
latest、master、vX.X.X这类单段标签,必须使用"版本-系统"的组合形式(如latest-ubuntu-22.04),否则拉取会直接失败。目前官方提供 debian-bookworm、ubuntu-22.04、ubuntu-24.04 三种系统后缀,且均同时支持 amd64 与 arm64 两种架构。 - 端口映射(Port Mapping):写法是"宿主机端口:容器内端口"。左侧可以随意改成你喜欢的数字,右侧是服务固定监听的端口、不可改动,访问 Web 管理页时用的是左侧端口。
- PUID / PGID:容器内默认用户名为
lizard,通过这两个环境变量可以把容器用户映射到你主机上的某个真实用户 ID,从而避免挂载目录的读写权限错乱。
三步完成最小化 Docker 容器化部署
下面以 Docker 为例给出最小可运行的方案,整个过程只需要三条命令。
第一步:拉取镜像
docker pull lizardbyte/sunshine:latest-ubuntu-22.04第二步:准备数据目录并赋权
mkdir -p ~/sunshine-data && sudo chown -R 1000:1000 ~/sunshine-data第三步:启动容器
docker run -d \ --name sunshine \ --restart unless-stopped \ --ipc host \ --device /dev/dri \ -e PUID=1000 -e PGID=1000 -e TZ=Asia/Shanghai \ -v ~/sunshine-data:/config \ -p 47984-47990:47984-47990/tcp \ -p 48010:48010 \ -p 47998-48000:47998-48000/udp \ lizardbyte/sunshine:latest-ubuntu-22.04启动完成后,在浏览器打开http://<主机IP>:47990,设置用户名与密码即可进入管理界面,随后就能在 Moonlight 客户端中看到这台主机了。 🚀
提示:如果主机没有可用的显卡,可以去掉
--device /dev/dri,服务依然能启动,只是编码会退化为软件模式,画质与延迟表现会有明显下降。
按场景进阶配置:家庭、局域网与公网串流的差异组合
同一个镜像,不同使用场景下的配置侧重点差别很大,下面按场景拆分推荐组合。
场景一:家庭内网自用
只在自家局域网内使用、追求简单省事:
- 端口映射保持默认即可,不需要启用 UPnP
- 数据目录放在本机磁盘即可,无需额外调优
- 建议在管理界面的 Configuration → Network 中关闭 Upnp 选项,减少不必要的端口暴露
场景二:局域网多设备共享
家里有多台电脑、手机和电视盒子同时使用:
- 完整映射默认端口段(47984-47990/tcp、47998-48000/udp、48010),保证客户端发现与连接稳定
- 为主机设置固定 IP 或主机名,避免 DHCP 地址变化导致客户端失联
- 在 Applications 页面中添加 Steam、桌面等常用入口,方便一键启动
场景三:跨公网串流(生产级环境)
需要在办公室、旅途中随时连回家中的电脑:
- 开启 UPnP 自动端口转发,或在路由器上手动添加端口映射规则
- 务必修改 Web 管理界面的默认密码并定期更换,避免暴露在公网后被扫描利用
- 把镜像标签从
latest换成具体的版本号,锁定运行行为,防止意外升级
常用参数速查表:一张表看懂部署参数
下表集中整理了部署时最常用的一批参数,涵盖"作用、推荐值、是否必须"三项信息。
| 参数 | 作用说明 | 推荐值 | 是否必需 |
|---|---|---|---|
-p <外部端口>:47990 | Web 管理界面端口 | 47990 | 是 |
-v <宿主机目录>:/config | 配置文件持久化挂载 | ~/sunshine-data | 是 |
-p 47984-47990:47984-47990/tcp | TCP 控制与 RTSP 会话端口 | 保持默认 | 是 |
-p 47998-48000:47998-48000/udp | UDP 视频、音频与控制端口 | 保持默认 | 是 |
-p 48010:48010 | 辅助连接端口 | 保持默认 | 是 |
-e PUID=<数字> | 容器内用户 ID | 1000 | 否 |
-e PGID=<数字> | 容器内用户组 ID | 1000 | 否 |
-e TZ=<时区> | 日志与任务时区 | Asia/Shanghai | 否 |
--device /dev/dri | 透传 GPU 渲染设备 | 有 GPU 时建议开启 | 否 |
--ipc=host | 共享宿主机内存空间 | 建议开启 | 否 |
需要精确调整网络行为(如 UPnP 转发策略、编码带宽)时,可以登录管理界面的 Configuration 页面逐项修改,页面自带关键词搜索,输入"Upnp"之类的字样即可快速定位对应选项。
高频报错排查清单:症状、原因与解决办法
下面按"症状 → 原因 → 解决"的问答形式,整理了几类被问得最多的问题,遇到报错时可直接对照。
问题 1:镜像拉取失败,提示标签不存在
- 原因:仍在沿用
latest或v0.18.0之类的旧式单段标签 - 解决:改为"版本-系统"组合标签,如
latest-ubuntu-24.04,或直接指定 commit 哈希
问题 2:Web 界面能打开,但客户端始终连不上
- 原因:端口段未完整映射,或主机防火墙拦截了 UDP 流量
- 解决:核对三条
-p参数是否齐全;在防火墙中放行 47984–48000 与 48010 端口
问题 3:容器正常启动,但画面严重卡顿
- 原因:未透传 GPU,编码退化为软件模式
- 解决:确认
/dev/dri存在后加上--device /dev/dri,并在 Troubleshooting 页面确认实际使用的编码器
问题 4:挂载目录出现权限报错
- 原因:宿主机目录属主与容器的 PUID/PGID 不一致
- 解决:用
id 用户名查询真实 ID,让 PUID/PGID 与其对齐,再执行chown修正目录属主
日志是定位问题的第一手资料。管理页内置日志查看器,支持关键词搜索与一键复制导出,编码器加载失败等错误信息会直接显示在这里,建议遇到异常时先看这里再动手。
稳定性与安全优化建议
- 版本锁定优先于追新:生产环境不要长期停留在
latest,改用固定版本标签;升级前先在测试环境验证,再应用到正式实例。 - 配置与容器解耦:所有配置都落在
/config挂载卷中,容器销毁重建不影响数据,建议定期备份该目录。 - 限制资源占用:通过
--memory与--cpus限制容器的内存与 CPU 上限,避免串流时拖垮同机运行的其他服务。 - 坚持最小权限原则:不要给容器
privileged权限,GPU 直通用--device白名单即可满足需求。 - 关注官方资料:更完整的上手指引可参考 getting_started.md,想从源码自行构建镜像的读者可以阅读 building.md 与 DOCKER_README.md。
总结与下一步
容器化部署的核心收益可以概括为"一次构建、随处运行":镜像把依赖、运行时和配置入口打包在一起,换机器、重建环境都只是重新拉取镜像的事。如果你是初次上手,从 Ubuntu 22.04 基础镜像配合 Docker Compose 起步是最稳妥的路径;已经习惯 Podman 的用户可以直接平替命令,参数语义完全一致。下一阶段,建议先吃透 Web 管理界面的各项配置,再逐步尝试多显卡调度、HDR 串流等进阶玩法,把硬件的性能真正榨干。 🎮
【免费下载链接】SunshineSelf-hosted game stream host for Moonlight.项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考