ARTICLE · 1228419
【AI工具链】跟着敲一遍③:Open WebUI 装好跑通



.
.
阅读本文 
系列:21 天本地 AI 工具链 · Day3(第 3/5 篇) 前情回顾:Day 1 装好 Docker,Day 2 让 Ollama 在 11434 端口跑起来;Day 3 给它一个网页界面。 实测环境:openEuler 22.03 SP4 / x86_64 / 虚拟机 4GB / 4 vCPU
Ollama 只能在终端里敲命令,没法给同事用、也没法截图做教程。Day 3 用 Docker 部署 Open WebUI,浏览器打开就能对话,还能管模型、建知识库。难点只有一个:ghcr.io 在国内经常拉不动——本文给你四源轮换的解法。
Day 1 的 Docker 已装好( docker --version有输出)Day 2 的 Ollama 已监听 0.0.0.0:11434目标:浏览器访问 http://192.168.149.132:3000
先确认两件事:
[root@LinuxPythonWorkshop ~]# docker --version[root@LinuxPythonWorkshop ~]# curl -s -o /dev/null -w "Ollama HTTP %{http_code}\n" http://192.168.149.132:11434/api/tags

docker pull ghcr.io/open-webui/open-webui:main卡住或报 TLS handshake timeout;容器起来了,浏览器打开却是 502 / 一直转圈。
镜像拉不动的原因:ghcr.io 在国内不稳,而 Day 1 配的 registry-mirrors只代理 docker.io,不代理 ghcr.io,所以必须显式换源。
502 的原因:容器还在 health: starting(首次启动要建库、装依赖),或者容器里连不上 Ollama。
① 拉镜像(Docker Hub 优先)
[root@LinuxPythonWorkshop ~]# docker pull openwebui/open-webui:main[root@LinuxPythonWorkshop ~]# docker images | grep -E "open-webui|openwebui"

📖 初学者讲解:Docker Hub 的 openwebui/open-webui 会走 Day 1 配好的国内镜像源(daocloud / USTC / 1ms),通常比 ghcr.io 快得多。能拉通就别折腾 ghcr。
② 拉不动就换南大 ghcr 镜像
[root@LinuxPythonWorkshop ~]# docker pull ghcr.nju.edu.cn/open-webui/open-webui:main 📖 初学者讲解:南京大学的 ghcr 镜像站是国内最稳的回退之一。再不行还有 ghcr.dockerproxy.com 和 docker.1ms.run。
③ 打本地标签
[root@LinuxPythonWorkshop ~]# docker tag openwebui/open-webui:main open-webui:day3 📖 初学者讲解:不管你从哪个源拉的,统一打成本地标签 open-webui:day3。之后 docker run 只依赖这个标签——换源、重拉都不会影响启动命令。
④ 启动容器
[root@LinuxPythonWorkshop ~]# docker run -d --name open-webui --restart always \ -p 3000:8080 \ -e OLLAMA_BASE_URL=http://192.168.149.132:11434 \ --add-host=host.docker.internal:host-gateway \ -v open-webui:/app/backend/data \ open-webui:day3 [root@LinuxPythonWorkshop ~]# docker ps --filter name=open-webui --format 'table {{.Names}}\t{{.Status}}\t{{.Ports}}' 
📖 初学者讲解:三个参数最关键:
OLLAMA_BASE_URL必须填局域网 IP,不能填 127.0.0.1——容器里的127.0.0.1是容器自己,不是宿主机;-v open-webui:/app/backend/data是命名卷,用户、对话、模型配置都在里面; -p 3000:8080是宿主机 3000 映射容器 8080(容器内部端口是 8080)。
⑤ 等待就绪并验证
[root@LinuxPythonWorkshop ~]# for i in $(seq 1 30); do curl -fsS http://127.0.0.1:3000/ >/dev/null 2>&1 && break; sleep 2; done[root@LinuxPythonWorkshop ~]# docker ps --filter name=open-webui --format 'table {{.Names}}\t{{.Status}}\t{{.Ports}}'[root@LinuxPythonWorkshop ~]# docker logs --tail 8 open-webui

📖 初学者讲解:首次启动要 30-60 秒,docker ps 里看到 Up ... (health: starting) 是正常的,不是失败。等 STATUS 变成 Up ... (healthy) 或浏览器能打开,再判定。
TLS handshake timeout | ||
open-webui |
docker ps显示 open-webui为Up,端口0.0.0.0:3000->8080/tcp浏览器打开 http://192.168.149.132:3000,能注册并登录模型下拉里能看到 qwen2.5:0.5b发一句中文,能正常回复

TLS handshake timeout | openwebui/open-webui:main 或 ghcr.nju.edu.cn | |
health: starting | docker logs open-webui 看进度 | |
OLLAMA_BASE_URL127.0.0.1 | http://192.168.149.132:11434 后重建 | |
open-webui | docker rm -f 容器,绝不 docker volume rm | |
-p 3001:8080,访问 3001 | ||
role |
拉镜像:Docker Hub 源约 2-5 分钟;ghcr 直连可能超时 首次启动建库:30-60 秒 注册 + 对话验证:3 分钟

本文正文为分段照抄版;完整一键脚本(120 行,含四源轮换、健康轮询、可重跑)已上传网盘,与后续篇目共用同一入口:
链接:https://pan.baidu.com/netdisk/share?surl=BOHEWiHa8UQXHR2g6RpJOg 提取码: ai25
一、选择题(5 题)
1. 本文为什么优先用 openwebui/open-webui:main 而不是 ghcr?
A. ghcr 镜像收费
B. Docker Hub 会走 Day 1 配好的国内镜像源
C. ghcr 镜像没有 main 标签
D. Docker Hub 镜像更小
2. OLLAMA_BASE_URL 应该填什么?
A. http://127.0.0.1:11434
B. http://localhost:11434
C. http://192.168.149.132:11434
D. http://172.17.0.1:3000
3. 页面 502 最常见的原因是?
A. 镜像损坏
B. 容器仍处于 health: starting
C. 端口写错
D. 浏览器缓存
4. 下列哪个操作会导致用户和对话丢失?
A. docker rm -f open-webui
B. docker restart open-webui
C. docker volume rm open-webui
D. docker stop open-webui
5. 宿主机 3000 被占用时,正确的改法是?
A. -p 8080:3000
B. -p 3001:8080
C. 改容器内端口为 3001
D. 删掉端口映射
二、填空题(2 题)
1. Open WebUI 的数据卷挂载到容器内的 __ 目录。
2. 首次访问时,第一个注册的账号会自动成为 __。

🎁 答对粉丝福利:
将答案按顺序发至评论区, 全部答对的前50位粉丝,将获得:
✅ 赠送完整的《21天工具链接实验手册 》



#OpenWebUI #Ollama #Docker #openEuler #AI工具链















































































