前阵子我在服务器上装好了 Ollama,本地跑 qwen2.5 挺顺,就想着套个 Open WebUI 当图形界面用。结果 docker 起好之后,打开页面模型下拉框是空的,发消息报 Failed to fetch,整个人都懵了。这篇把 Ollama 接 Open WebUI 我踩过的 4 个坑记下来,全是真在机器上排出来的。
第一个坑:容器里的 localhost 根本不是宿主机
Open WebUI 跑在 docker 里,Ollama 装在宿主机。你以为在容器里访问 localhost:11434 就能连到宿主机的 Ollama,其实容器自己的 localhost 是它自己,压根不指向宿主机。所以千万不能在 OLLAMA_BASE_URL 里填 localhost。正确做法是让容器能解析到宿主机:Linux 上 docker 起容器时加 --add-host=host.docker.internal:host-gateway,再把 OLLAMA_BASE_URL 设成 host.docker.internal:11434。macOS 和 Windows 的 Docker Desktop 自带这个域名,不用加参数。
第二个坑:Ollama 只监听 127.0.0.1,容器连进来就被拒
就算地址配对了,Ollama 默认只绑 127.0.0.1:11434,容器从外部网络过来它直接拒绝。临时验证可以这么起:OLLAMA_HOST=0.0.0.0:11434 ollama serve。要永久生效,Linux 上改 systemd 单元:sudo systemctl edit ollama,在 Service 段加 Environment=OLLAMA_HOST=0.0.0.0:11434,然后 sudo systemctl daemon-reload 再 sudo systemctl restart ollama。改完用 ollama list 确认服务还在跑。
第三个坑:地址一旦存进数据库,环境变量就不灵了
这是最阴的一个。我第一次在 OLLAMA_BASE_URL 环境变量里填错了,后来改了环境变量重启容器,结果还是连不上。原因是 Open WebUI 把连接地址写进了自己的数据库,环境变量只在首次生效,之后以库里的值为准。得进界面改:左下角头像进设置,管理员面板里找连接,把 Ollama API 地址改成正确的 host.docker.internal:11434,旁边有个验证按钮,点出绿勾才算通,再保存。
第四个坑:中文界面找不到入口,旧版干脆没这选项
注册登录之后满屏英文,想换中文。入口在左下角头像菜单里的设置,进通用选项卡,找语言那个下拉框,选简体中文,拉到页面底部保存,刷新页面就变成中文了,不用重启容器。我一开始下的是旧版镜像,语言列表里压根没有中文,白找半天。直接把镜像标签改成 main 拉最新版就好了,现在汉化率很高,基本不影响用。
顺手记几招
第一次打开 localhost:3000 注册,第一个注册的账号自动是管理员,密码一定设强一点,别随手填 test。验证连通性最直接的办法是进容器里 curl 一下:docker exec -it open-webui curl host.docker.internal:11434/api/tags,返回一串模型 JSON 就说明链路通了。模型得自己拉,docker exec -it ollama ollama pull qwen2.5:7b,拉完 ollama list 能看到。生产环境记得给容器加 WEBUI_SECRET_KEY,用 openssl rand -hex 32 生成,别让别人随便能注册成管理员。云服务器还想对外暴露的话,11434 端口别裸奔到公网,套一层反代加鉴权更稳。