夜雨聆风学习资料网

ARTICLE · 1228419

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

【AI工具链】跟着敲一遍③:Open WebUI 装好跑通
      
赞
AI工具链 | 每日一练 | 实用工具 |  职业发展  
                                                  感谢您抽出..阅读本文               
  系列: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 在国内经常拉不动——本文给你四源轮换的解法。
今日主要内容概要:
1.环境准备;
2.症状:镜像拉不动、页面 502;
3.照抄清单(5 段关键命令);
4.三个关键点;
5.通关验证;
6.报错排查; 
7.实测耗时; 
8.完整脚本获取; 
9.动手练习题; 
01
环境准备
  • 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 
02
症状:镜像拉不动、页面 502
  两个最常见的现象:
  • 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。

03
照抄清单(5 段关键命令)

 ① 拉镜像(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) 或浏览器能打开,再判定。

04
三个关键点
关键点
要点
不做会怎样
镜像源
Docker Hub 优先,ghcr 走南大镜像
卡在 TLS handshake timeout
OLLAMA_BASE_URL
填局域网 IP,不填 127.0.0.1
模型下拉为空,对话报连接失败
数据卷
用命名卷 open-webui
重建容器后用户/对话全丢
05
通关验证
    • docker ps
       显示 open-webui 为 Up,端口 0.0.0.0:3000->8080/tcp
    • 浏览器打开 http://192.168.149.132:3000,能注册并登录
    • 模型下拉里能看到 qwen2.5:0.5b
    • 发一句中文,能正常回复
    06
    报错排查
      报错
      根因
      修正
      TLS handshake timeout
      (ghcr)
      ghcr.io 国内不稳
      换 openwebui/open-webui:main 或 ghcr.nju.edu.cn
      页面 502 / 一直转圈
      容器仍 health: starting
      等 60 秒;docker logs open-webui 看进度
      模型下拉为空
      OLLAMA_BASE_URL
       填了 127.0.0.1
      改成 http://192.168.149.132:11434 后重建
      重建后用户/对话丢失
      删了命名卷 open-webui
      只 docker rm -f 容器,绝不 docker volume rm
      端口 3000 被占
      其它服务占用
      改 -p 3001:8080,访问 3001
      注册后不是管理员
      首个注册账号才是 admin
      用首个账号登录,或改数据库 role
      07
      实测耗时
        • 拉镜像:Docker Hub 源约 2-5 分钟;ghcr 直连可能超时
        • 首次启动建库:30-60 秒
        • 注册 + 对话验证:3 分钟
        08
        完整脚本获取

            本文正文为分段照抄版;完整一键脚本(120 行,含四源轮换、健康轮询、可重跑)已上传网盘,与后续篇目共用同一入口:

        • 链接:https://pan.baidu.com/netdisk/share?surl=BOHEWiHa8UQXHR2g6RpJOg
        • 提取码:ai25
        09
        动手练习题

        一、选择题(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天工具链接实验手册 》

        【AI工具链】跟着敲一遍②:4GB 跑通 Ollama,7B 别碰

        【AI工具链】跟着敲一遍①: openEuler 装 Docker 报错,照抄就跑通

        下篇内容预告;
        1.界面有了,接下来让它"能编程":Day 4 用 Python 调 Ollama API——非流式和流式两种写法,重点讲清流式返回的 NDJSON 怎么逐行解析,这是很多人踩坑的地方。🚀  
        👍 觉得这篇文章有帮助?点赞 + 在看 + 分享,是对我最大的支持!
        💬 有疑问?评论区留言,我会一一回复~

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

         本文由LinuxPythonWorkshop(清风)独家发布,请在获得账号管理员授权后转载。
        策划制作
          策划:清风    丨   监制:明月
          编辑:啸啸    丨   图片来源:稿定设计及网络,侵删

        相关学习资料