Sunshine游戏串流服务Docker部署避坑指南:新手一次跑通的完整教程
【免费下载链接】SunshineSelf-hosted game stream host for Moonlight.项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine
Sunshine 是一个开源的 Moonlight 游戏串流服务端,装好后可以把电脑上的游戏画面实时推到手机、平板甚至另一台电脑上。但对新手来说,手动装依赖、配显卡、开端口,每一步都可能劝退。这篇教程带你用 Docker 把 Sunshine 跑起来,从镜像选择、GPU 挂载到端口冲突排查一次讲清楚,照着做就能完成你的第一次串流。
动手前,先备齐这三样东西
Docker 部署最大的好处,是把 Sunshine 和它的一堆运行依赖像打包好的行李一样塞进镜像,你不用自己逐个安装编译环境。但有三样东西还是得你亲自准备:
- 一台装了 Docker 的机器:主流 Linux 发行版都行;如果你在 Windows 上装了 Docker Desktop,建议配 WSL2 后端再跑。
- 一块能用的显卡:核显、N 卡、A 卡都可以,前提是宿主机驱动装好。没有 GPU 也能启动,但编码会走 CPU,延迟和画质都明显变差。
- 一台装 Moonlight 的设备:手机、平板、另一台电脑都行,它就是你的"遥控器"。
如果你打算用 Podman 替代 Docker,本文的命令同样适用,差异点会在后面单独说明。
第一条命令:10 分钟把串流服务拉起来
先别纠结参数含义,把下面命令里的/home/you/sunshine-config换成你自己的目录,直接执行:
docker run -d \ --name=sunshine \ --restart=unless-stopped \ -e TZ=Asia/Shanghai \ -v /home/you/sunshine-config:/config \ -p 47984-47990:47984-47990/tcp \ -p 48010:48010 \ -p 47998-48000:47998-48000/udp \ lizardbyte/sunshine:latest-ubuntu-24.04这条命令会拉取镜像并在后台启动容器,配置目录、时区和三组串流端口一次性全部配好。
想确认它有没有起来,执行docker logs sunshine看输出;想确认端口在监听,执行docker ps。然后打开浏览器访问http://你的宿主机IP:47990,看到欢迎页就说明服务已经活了。首次登录会让你设置用户名和密码,务必记好——这是以后进入管理界面的唯一凭证:
到这里其实已经能用 Moonlight 配对串流了。不过先别急着开玩,下面两个问题不搞清楚,之后很容易在奇怪的地方卡住。
选镜像别踩坑:最新版的标签规则变了
网上不少教程还在写lizardbyte/sunshine:latest或v0.18.0这种简单标签,直接复制会报"镜像不存在"。原因是自 v0.18.0 起,官方收紧了镜像标签规则:不再提供独立的 latest、master、vX.X.X 标签,必须使用"版本-系统"的组合标签。
标签格式为<版本>-<系统>,例如latest-ubuntu-24.04、v0.18.0-debian-bookworm。
- 版本部分可选:具体版本号(如
v0.18.0)、latest(最新稳定版)、master(开发分支),甚至某个 commit 的 hash。 - 系统部分目前可选:
debian-bookworm、ubuntu-22.04、ubuntu-24.04,对应不同的基础镜像。
系统后缀主要影响底层的 glibc 版本和可用软件源,日常使用选ubuntu-24.04基本不会出错。如果你是 ARM 架构的机器(开发板、ARM 云主机等),这三个后缀目前都同时提供 x86_64 和 arm64 两种架构的镜像,拉取时 Docker 会自动匹配,不用手动指定。
正式一点:把命令整理成 docker-compose
docker run 适合临时验证,想长期稳定运行,还是写一份 docker-compose 配置更省心——改参数、升级、换机器都能直接复用。下面这份保存成docker-compose.yml即可:
services: sunshine: image: lizardbyte/sunshine:latest-ubuntu-24.04 container_name: sunshine restart: unless-stopped devices: - /dev/dri:/dev/dri ipc: host volumes: - /home/you/sunshine-config:/config environment: - PUID=1000 - PGID=1000 - TZ=Asia/Shanghai ports: - "47984-47990:47984-47990/tcp" - "48010:48010" - "47998-48000:47998-48000/udp"这份配置和前面的 docker run 命令一一对应:devices把显卡设备传进容器,ipc: host让容器共享宿主机内存(串流传输要用),volumes把配置持久化到宿主机,ports暴露三组端口。保存后在同目录执行docker compose up -d即可启动。
Podman 用户注意:这里需要把ipc: host去掉,改用--userns=keep-id来处理用户权限,其余照抄。
登录管理界面后,在"Applications"里能看到 Desktop、Steam 等预设应用,也可以自己添加——串流时 Moonlight 里选择哪个应用,就对应启动哪个程序:
部署中三件最容易出错的事
新手在 Docker 部署 Sunshine 时,九成的问题都出在下面三个地方,提前了解能少走很多弯路。
GPU 设备如何挂载进容器
默认情况下容器里"看不见"你的显卡,串流会退化成 CPU 软编码,画面糊、延迟高。把显卡交给容器,核心就是一行:--device /dev/dri/(Intel、AMD 的核显和独显都走这个路径)。NVIDIA 用户还需要装好 nvidia-container-toolkit,并在启动命令里加--gpus all。
挂载之后怎么确认生效?进入 Web 管理界面的配置页,找到编码器选项,看能不能选到你的显卡型号;或者翻日志,看编码器初始化是否成功。正常情况下日志会打印显卡型号和编码格式信息:
配置文件挂载与用户权限
Sunshine 把配置存在容器内的/config目录,所以必须挂载出来,否则容器一删配置全没。挂载后最常见的报错是"权限不足"或"无法写入配置",原因是容器内进程的用户和宿主机目录属主不一致。解决方式是指定宿主机上已有的用户 ID:
id 你的用户名拿到输出里的uid和gid后填入环境变量,例如输出是uid=1000、gid=1000,就设置PUID=1000、PGID=1000,同时确保宿主机上的配置目录属主也是这个 ID:
sudo chown -R 1000:1000 /home/you/sunshine-config出现权限问题,先检查这两处是否一致,基本都能解决。
端口冲突怎么解决
Sunshine 串流用到三组端口:TCP 的 47984-47990(其中 47990 是 Web 管理界面)、TCP 的 48010、UDP 的 47998-48000(承载视频、音频和控制数据)。如果宿主机上已有服务占用,最简单的办法是只改宿主机一侧的映射,比如把管理界面映射成8080:47990,之后访问http://IP:8080即可。映射规则是"左边宿主机、右边容器",右边不能动,左边随便改。
跑不起来的时候,先从日志找答案
排查串流问题,第一站永远是管理界面右下角的 Logs 页面,而不是反复重启容器碰运气。日志会直接告诉你编码器有没有初始化成功、客户端有没有连上来、哪一步报了错:
结合新手最常见的几个现象,对号入座:
- Moonlight 搜不到主机:多半是端口没映射全,或宿主机防火墙挡了 UDP 47998-48000。先
docker ps确认端口都列出来了,再检查防火墙规则。 - 能连上但画面卡成幻灯片:编码器没走 GPU,回到设备挂载那部分,确认显卡真的进了容器。
- Web 管理界面打不开:确认映射的是 47990,且访问地址是宿主机 IP 而不是容器 IP。
- 日志时间对不上:在环境变量里设置
TZ(例如Asia/Shanghai),日志和配对时间就都准了。
让它长期稳定运行的小建议
跑通只是开始,想让服务一直安稳待命,最后这几条可以顺手做掉:
- 固定镜像版本:把
latest换成具体版本号(如v0.18.0-ubuntu-24.04),避免某天升级带来不兼容。 - 定期备份配置:
/config目录里就是全部家当,复制一份到别处即可,几秒钟的事。 - 限制资源占用:在 compose 里加
cpus和mem_limit,防止串流时把机器资源吃满,影响同一台机器上的其他服务。 - 配合 Steam 使用:想串流 Steam 游戏的话,可以把 Steam 集成进同一镜像——Sunshine 官方镜像本来就是按"基础镜像"设计的,适合在自己项目里二次构建。
到这里,一条完整的"拉取镜像 → 启动容器 → 配置应用 → 远程串流"路径就通了。剩下的,就是选个舒服的姿势,开玩。
【免费下载链接】SunshineSelf-hosted game stream host for Moonlight.项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考