校园网服务器部署 Open WebUI 踩坑记:从代理配置到镜像加速
最近给校园网服务器配置了 Ollama,想装一个 Open WebUI 作为图形化管理界面。本以为 Docker 一行命令就能搞定,结果被
ghcr.io的拉取速度折磨了一整天。记录下完整的排坑过程,希望能帮到遇到类似问题的朋友。
背景
服务器环境:Windows Server(通过校园网访问外网,需配置代理)
已有服务:Ollama 已正常运行,监听 11434 端口
目标:部署 Open WebUI,通过 Web 界面管理本地 AI 模型
理想中的部署命令很简单:
docker run -d -p 3000:8080 \
-v open-webui:/app/backend/data \
-e OLLAMA_BASE_URL=http://host.docker.internal:11434 \
--name open-webui \
--restart always \
ghcr.io/open-webui/open-webui:main
然而,镜像拉取过程却卡在了 Pulling fs layer,进度条几乎不动。
踩坑一:代理配置不生效
服务器需要通过 SOCKS5 代理(Dante)访问外网。一开始直接在 docker run 命令里加了环境变量:
-e HTTP_PROXY="socks5://代理IP:1080" \
-e HTTPS_PROXY="socks5://代理IP:1080"
结果发现:Docker 拉取镜像的过程根本不走这个代理。因为 docker run 中的 HTTP_PROXY 只影响容器内部应用的网络请求,而镜像拉取是 Docker 守护进程(daemon)的任务,它有自己的代理配置方式。
尝试一:为 Docker daemon 配置 SOCKS5 代理
修改 daemon.json(Windows 下路径为 C:\ProgramData\docker\config\daemon.json):
{
"proxies": {
"http-proxy": "socks5://代理IP:1080",
"https-proxy": "socks5://代理IP:1080",
"no-proxy": "localhost,127.0.0.1"
}
}
重启 Docker 后,镜像拉取依然缓慢——Docker 对 SOCKS5 协议的支持并不稳定,尤其是 Windows 版本。
尝试二:Privoxy 将 SOCKS5 转换为 HTTP 代理
思路:在本地跑一个 Privoxy,把 SOCKS5 转成 Docker 原生支持的 HTTP 代理。
- 安装 Privoxy(Windows 版)
- 修改
config.txt,添加转发规则:forward-socks5t / 代理IP:1080 . - 启动时遇到两个错误:
Wrong number of parameters for forward-socks5t→ 修正格式,确保/和末尾的.都存在。can't bind to 127.0.0.1:8118→ 端口被占用,结束原有privoxy.exe进程或更换端口(如 8119)。
- 最终 Privoxy 成功运行,提供 HTTP 代理
http://127.0.0.1:8118。 - 在 Docker Desktop 设置 → Resources → Proxies 中填入该地址。
折腾半天,拉取速度有所改善,但依然容易卡在下载大文件(如 1.16 GB 的层)时中断。对于生产环境,这种依赖单点代理的方式并不理想。
终极解决方案:国内镜像加速器
既然问题根源是 ghcr.io 在国内访问太慢,最直接的办法就是使用国内镜像站。Docker 官方支持配置 registry-mirrors,让拉取请求自动走国内镜像。
操作步骤(以 Docker Desktop 为例)
- 右键托盘中的 Docker 图标 → Settings
- 选择 Docker Engine
- 在 JSON 配置中添加或修改
registry-mirrors字段:
{
"builder": {
"gc": {
"defaultKeepStorage": "20GB",
"enabled": true
}
},
"experimental": false,
"registry-mirrors": [
"https://docker.xuanyuan.me",
"https://docker.1ms.run",
"https://xuanyuan.cloud"
]
}
> 以上镜像源目前均可用,`docker.1ms.run` 速度较快,南大和交大镜像站也很稳定。
4. 点击 **Apply & Restart** 重启 Docker
### 验证效果
重启后重新执行拉取命令:
```bash
docker run -d -p 3000:8080 \
-v open-webui:/app/backend/data \
-e OLLAMA_BASE_URL=http://host.docker.internal:11434 \
--name open-webui \
--restart always \
ghcr.io/open-webui/open-webui:main
下载速度从几十 KB/s 飙升到几 MB/s,几分钟内完成所有层拉取。容器成功启动后,访问 http://服务器IP:3000 即可看到 Open WebUI 的登录界面。
经验总结
| 问题 | 原因 | 最佳解法 |
|---|---|---|
| Docker 拉取镜像卡住 | 海外镜像仓库(ghcr.io)在国内访问慢 | 配置国内 registry mirror |
| 代理配置不生效 | 容器内代理 vs 守护进程代理混淆 | 区分 docker run -e 和 daemon 配置 |
| SOCKS5 代理难用 | Docker 对 SOCKS5 支持不完善 | 使用 Privoxy 转换为 HTTP,或直接上镜像加速器 |
一句话结论:遇到 Docker 拉取镜像慢,优先配置国内镜像加速器,不要纠结于代理。镜像加速器配置简单、效果显著,是治本之策。
后续
Open WebUI 部署完成后,就可以愉快地在浏览器里和本地 Ollama 模型聊天了。下一步计划接入 RAG(知识库)功能,让 AI 能回答私有文档的问题。如果有兴趣,后续再写一篇关于知识库配置的文章。
本文首发于个人博客,记录真实排坑过程。如果你在校园网、内网环境下部署 AI 工具也遇到了奇怪的问题,欢迎留言交流。
浙公网安备 33010602011771号