【教程】Docker容器部署 酒馆(SillyTavern)指北
写在前面:为什么要用 Docker 装酒馆
酒馆(SillyTavern)本身是个 Node.js 程序,传统装法是装 Node 环境、git clone、npm install,升级要手动 git pull,出问题还得自己修依赖。用 Docker 装的好处很实在:
- 不污染系统:Node 环境全在容器里,不想要了删掉容器和文件夹就干净卸载,不会跟系统的 Node/其它程序打架。
- 数据看得见摸得着:角色卡、聊天记录、密钥、配置全在你电脑上的一个文件夹里,随时打包备份,重装系统、换电脑直接搬过去。
- 更新只要两条命令:docker compose pull 加 docker compose up -d,数据一动不动。
- NAS 也能跑:群晖、威联通、fnOS 都能装 Docker,丢在 NAS 上 24 小时在线,手机在外面也能连(安全做法见后面)。
- 想开几个就开几个:朋友要一个、自己留一个,改个端口和文件夹就是两个互不干扰的酒馆。
代价也说清楚:镜像压缩后大概 200MB,国内直连 GitHub 容器仓库多半拉不动,要配个镜像加速(第三节写了,一行搞定);另外要花五分钟搞懂 Docker 里「容器」和「挂载目录」这两个词。
零、准备工作
- 系统:Win10 21H2 以上或 Win11(Docker Desktop 需要 WSL2,安装时会提示并自动处理,点同意重启即可);Linux / NAS 直接装 docker。
- 硬盘:至少留 10G 空间。镜像占几百 MB,剩下的是给以后的角色卡、聊天记录和自动备份用的。
- 端口:默认 8000。先看看有没有被占用:Windows 在命令提示符里执行 netstat -ano | findstr :8000,Linux 执行 ss -ltnp | grep 8000,没有任何输出就说明空闲。
- 网络:需要能连上 ghcr.io(GitHub 的容器仓库)。连不上没关系,第三节教你换镜像站。
一、第一步:装 Docker
Windows 10 / 11
- 去 Docker 官网下载 Docker Desktop(选 Windows 版),一路下一步装完。
- 首次启动会要求安装 WSL2 内核,按提示点同意,装完重启电脑。
- 重启后托盘里的鲸鱼图标不再是红色,状态显示 Running 就算好了。
- 验证:打开命令提示符执行 docker version 和 docker compose version,两条都有版本号输出即可(新版 Docker Desktop 自带 compose,不用单独装)。
群晖 DSM 7:套件中心搜 Container Manager 装上,之后用它的「项目」功能贴 compose 文件(下面的 yml 可以整段粘进去)。
威联通:装 Container Station,同样支持 compose 项目。
fnOS / 其它 Linux:装好 docker 后执行 sudo systemctl enable –now docker 让它开机自启;如果你的账号不是 root,还要执行 sudo usermod -aG docker 你的用户名,然后重新登录一次,否则每次都要 sudo。
二、第二步:关于拉镜像(国内加速必看)
酒馆的官方镜像是 ghcr.io/sillytavern/sillytavern,国内直连经常超时。有两个办法,选一个就行。
办法一(最省事):把镜像地址换成南京大学开源镜像站的 ghcr 反代,只改域名,后面的路径和标签原样保留:
ghcr.io/sillytavern/sillytavern:latest 改成 ghcr.nju.edu.cn/sillytavern/sillytavern:latest
镜像站和官方仓库是同一个东西,只是换了个门口;但它同步可能有延迟,如果发现拉到的版本比官网旧,把域名换回 ghcr.io 再试一次就行(能连上 ghcr.io 的话直接用官方地址也可以)。
办法二:给 Docker 配代理。 Docker Desktop 在 Settings → Resources → Proxies 里填上你本地代理的地址(例如 http://127.0.0.1:7897),点 Apply 后重启 Docker;Linux 是在 docker 的 systemd 服务里加 HTTP_PROXY 环境变量再重启服务。配了代理就不用改镜像地址了。
三、第三步:起一个酒馆(推荐用 docker compose)
- 先建一个专门放酒馆的文件夹,例如 D:SillyTavern(Linux/NAS 例如 /volume1/docker/sillytavern)。以后这个文件夹就是酒馆的全部,备份就是拷它。
- 在这个文件夹里新建一个文件,文件名必须叫 docker-compose.yml(Windows 用记事本另存为时,文件名两侧加上英文引号 “docker-compose.yml”、保存类型选「所有文件」、编码选 UTF-8,不然会被存成 .yml.txt)。
- 把下面这段整段粘进去、保存:
services:
sillytavern:
container_name: sillytavern
hostname: sillytavern
image: ghcr.nju.edu.cn/sillytavern/sillytavern:latest
environment:
- NODE_ENV=production
- FORCE_COLOR=1
- SILLYTAVERN_HEARTBEATINTERVAL=30
ports:
- "8000:8000"
volumes:
- ./config:/home/node/app/config
- ./data:/home/node/app/data
- ./plugins:/home/node/app/plugins
- ./extensions:/home/node/app/public/scripts/extensions/third-party
restart: unless-stopped
几个关键行是什么意思:
- image:用哪个镜像。能直连的话把域名换回 ghcr.io;想用开发版就把标签 latest 换成 staging(不建议日常用)。
- ports 的 “8000:8000”:前面那个是本机端口,被占用了就改成 “8080:8000″,之后访问 8080;冒号后面那个 8000 是容器内部端口,别动。
- volumes 四条:这就是「数据留在本机」的关键。config 是配置文件,data 是角色卡与聊天记录(最重要的就是它),plugins 是服务端插件,extensions 是全局界面扩展。左边 ./ 表示和这个 yml 同一个文件夹。
- restart: unless-stopped:开机自启,程序崩了自动拉起来,NAS 用户特别需要这条。
- 在终端里 cd 到刚才那个文件夹,执行:
docker compose up -d
第一次会下载镜像(压缩后约 200MB),看到 Started 就成功了。想确认状态:docker compose ps;想看它在说什么:docker compose logs -f –tail=50,正常会打印一行 SillyTavern is listening on IPv4: 0.0.0.0:8000。
- 浏览器打开 http://localhost:8000,看到酒馆界面就完事了。
备选:一行命令版(适合 Linux / NAS 的 SSH 党)
不喜欢 yml 的话,在要先建好数据目录的前提下执行下面这一整条(把 /volume1/docker/sillytavern 换成你自己的绝对路径):
docker run -d --name=sillytavern --restart unless-stopped -p 8000:8000 -v /volume1/docker/sillytavern/config:/home/node/app/config:rw -v /volume1/docker/sillytavern/data:/home/node/app/data:rw -v /volume1/docker/sillytavern/plugins:/home/node/app/plugins:rw -v /volume1/docker/sillytavern/extensions:/home/node/app/public/scripts/extensions/third-party:rw -e NODE_ENV=production ghcr.nju.edu.cn/sillytavern/sillytavern:latest
Windows 用户别用这条:cmd 和 PowerShell 的换行符、路径写法都不一样,容易踩坑,老老实实用上面的 compose。
四、手机 / 平板同局域网访问(必看:白名单)
Docker 里的酒馆启动时已经带了监听全网卡的参数,手机跟着 WiFi 就能连,但默认开着 IP 白名单,只放行本机地址(127.0.0.1、::1),所以别的设备打开会看到 Forbidden。
改法:第一次成功启动之后,你的文件夹里会多出一个 config 文件夹,里面有个 config.yaml。用记事本打开它,把 whitelist 那一段加上家里的网段:
whitelistMode: true whitelist: - ::1 - 127.0.0.1 - 192.168.0.0/16 - 10.0.0.0/8 - 172.16.0.0/12
保存后回到文件夹执行 docker compose restart 重启容器(改配置文件必须重启才生效)。
然后手机浏览器输入 http://电脑的局域网IP:8000,注意是 http 不是 https。IP 怎么看:Windows 执行 ipconfig 找 IPv4 地址;NAS 在管理面板的网络设置里看(一般是 192.168.x.x)。安卓 Chrome 还能「添加到主屏幕」,用起来跟 App 差不多。
如果手机打开是白屏或者一直转圈,八成是电脑防火墙拦了 8000 端口:Windows 首次启动 Docker 时会弹窗问是否允许访问网络,当时点了取消的话,去 Windows 安全中心 → 防火墙和网络保护 → 允许应用通过防火墙,把 Docker 相关的都勾上「专用网络」。
五、想给朋友用 / 在外面也能连(安全注意)
官方文档有一句写得很重的警告:不要把酒馆端口直接暴露在公网。想要外网访问,按下面的顺序选:
- 组网工具:Tailscale / ZeroTier 这类,把设备加进同一个虚拟内网,只有自己人连得到,最省心。
- 隧道服务:Cloudflare Zero Trust Tunnel(有域名就行,不用在路由器上开端口)、ngrok。官方推荐的就是这种。
- 至少设个密码:在 config.yaml 里把 basicAuthMode 改成 true,并填上 basicAuthUser 的用户名和密码。注意这种密码是明文传输的,最好再套一层 HTTPS(反代或者 Cloudflare)。
- 多人各自用自己的:把 enableUserAccounts 改成 true 打开多用户模式,每人一个账号,角色卡和聊天记录互相看不见,还能顺便当作访问控制。
另外建议顺手打开 hostWhitelist(防 DNS 重绑定攻击):hostWhitelist.enabled 改成 true,hosts 里填你自己的域名(用隧道就填隧道域名,前面加点号可以连子域一起信任)。
六、更新(不会丢数据)
在酒馆文件夹里执行两条命令:
docker compose pull docker compose up -d
跑完就是最新版,角色卡和聊天记录都在 data 文件夹里,完全不受影响。
想固定在某个版本、或者升级后想回退:把 yml 里 image 那行的 latest 换成具体版本号就行,例如 ghcr.io/sillytavern/sillytavern:1.19.0,同样 up -d 一下即可切过去。顺便说一下当前的情况:写这篇的时候最新正式版是 1.19.0(2026-09-14 发布),官方给普通用户推荐的一直是 latest(稳定版),staging 是每天更新的开发版,图新鲜可以试,出问题别怪别人。
七、备份与搬家
需要备份的东西只有三样,全在酒馆文件夹里:
- config:配置和访问设置
- data:角色卡、聊天记录、备份、密钥
- plugins:服务端插件(界面扩展装在 extensions 里)
把整个文件夹压缩带走就是完整备份。换机器就是三步:文件夹搬过去 → 改好 yml 里的路径 → docker compose up -d,原地复活,老婆一个不少。
容器本身不用备份,随时能重新拉一个出来。
NAS 用户额外提醒一句:如果你的 NAS 上数据目录属主和容器里的用户对不上(典型症状是启动后报写入失败、配置存不住),可以在 compose 的 environment 里加两行 PUID 和 PGID,值填你 NAS 上该目录的属主 UID/GID(群晖常见 1000 或者你的账号 ID),容器会自动把权限对齐。
八、常见报错排查
- 卡在拉镜像 / TLS handshake timeout / connection reset:网络问题,确认 image 那行是不是已经换成 ghcr.nju.edu.cn,或者按第二节给 Docker 配上代理再试。报 unauthorized 说明连上了 ghcr.io 但被限流,等一会重试或用镜像站。
- 打不开 localhost:8000:先 docker compose ps 看容器是不是 Up,再 docker compose logs 看报错。端口冲突就改端口,比如 “8080:8000″,之后访问 http://localhost:8080。
- 手机连不上,日志里写 Forbidden:就是白名单,按第四节把 192.168.0.0/16 这些网段加进去再重启容器。
- 重启之后角色卡、聊天记录全没了:99% 是挂载路径写错,或者你换了目录执行命令,导致容器在别的地方新建了一套空的 data。数据通常没丢,去硬盘上搜一下 data 文件夹。稳妥做法是 volumes 全写绝对路径,例如 D:SillyTaverndata:/home/node/app/data。
- 容器一直重启:docker compose logs -f 看最后几行,多半是 config.yaml 被改坏了(缩进用了空格和 Tab 混排、冒号后面少了空格、用了中文标点)。直接把 config/config.yaml 删掉再 up -d,会重新生成一份默认配置,重配一遍就好。
- 页面能开但聊天报 400 / 401 / 超时:这跟酒馆没关系,是 API 那边的事。地址要带全(很多服务要写到 /v1),密钥别带多余空格,部分服务需要挂代理,用反代的注意放行跨域。
- 想换端口、换数据目录:改 yml 里的 ports 或 volumes 再 up -d,容器会用新配置重建,数据照样在(前提是路径指着原来的数据)。
九、几个小建议
- 第一次进酒馆先去用户设置里把界面语言切成简体中文,后面找东西方便很多。
- 角色卡从「角色管理」右上角导入,PNG 卡和 JSON 都支持;自己写的角色记得导出备份。
- 要装扩展(图像生成、语音朗读之类)直接在酒馆界面里点着装,别手改容器内部,容器一更新就白改了。
- 酒馆自带自动备份,也可以在用户设置里把整份数据导出来放网盘,双保险。
差不多就这些。有卡住的把报错原文贴评论区,看到会回。祝各位的赛博老婆长长久久。

