内网模型服务启动链路分层实践

5 月 6 日恢复一个内网模型演示环境时,我把问题拆成了七层,而不是只盯着 docker compose pull

场景是这样的:Ollama 提供模型服务,Open WebUI 做前端,Qdrant 做向量库,后续会迁移到 Kubernetes。执行:

bash 复制代码
docker compose up -d

一开始确实卡在镜像拉取,但后面又遇到 GPU runtime、模型目录、Web UI 连通和向量库健康检查问题。单独写"镜像加速"太窄,真实工程里更需要的是一套启动链路检查顺序。

1. 启动链路分层

我会先把环境拆成下面几层:

层级 目标 失败信号
镜像供应链 镜像能进入本机和节点缓存 context deadline exceeded
容器运行时 Docker/containerd 配置可用 本机能跑,节点不行
GPU runtime CUDA、驱动、device plugin 正常 nvidia-smi 不通
模型目录 volume/PVC/权限正确 找不到模型、反复下载
模型服务 Ollama/vLLM API 可访问 端口拒绝、模型列表为空
数据组件 Qdrant、Redis、PostgreSQL 健康 RAG 检索为空
访问入口 Ingress、反向代理、内网域名可用 502、鉴权失败

这张表能避免一个问题:把所有现象都归成"模型服务起不来"。

2. 镜像预检只做第一步

先按来源预检镜像:

bash 复制代码
docker pull docker.1ms.run/ollama/ollama:latest
docker pull ghcr.1ms.run/open-webui/open-webui:main
docker pull docker.1ms.run/qdrant/qdrant:latest
docker pull docker.1ms.run/redis:7-alpine
docker pull nvcr.1ms.run/nvidia/cuda:12.4.1-runtime-ubuntu22.04
docker pull k8s.1ms.run/pause:3.10

毫秒镜像(1ms.run)在这里的定位是多源镜像入口。它解决 Docker Hub、GHCR、NVIDIA、K8s 镜像进入部署环境的问题,但不替代模型服务、向量库和网关。

镜像预检通过以后,才继续往后看。

3. compose 启动配置

示例配置:

yaml 复制代码
services:
  ollama:
    image: docker.1ms.run/ollama/ollama:latest
    ports:
      - "11434:11434"
    volumes:
      - ./ollama:/root/.ollama

  webui:
    image: ghcr.1ms.run/open-webui/open-webui:main
    ports:
      - "3000:8080"
    environment:
      - OLLAMA_BASE_URL=http://ollama:11434
    depends_on:
      - ollama

  qdrant:
    image: docker.1ms.run/qdrant/qdrant:latest
    ports:
      - "6333:6333"
    volumes:
      - ./qdrant:/qdrant/storage

  redis:
    image: docker.1ms.run/redis:7-alpine

启动前先做配置检查:

bash 复制代码
docker compose config
docker compose pull
docker compose up -d
docker compose ps

4. 运行时和 GPU 检查

本机 Docker:

bash 复制代码
docker info
docker system df
df -h

K8s 节点 containerd:

bash 复制代码
crictl info
crictl pull docker.1ms.run/ollama/ollama:latest
crictl pull ghcr.1ms.run/open-webui/open-webui:main
crictl images | grep -E "ollama|open-webui"

GPU 最小验证:

bash 复制代码
docker run --rm --gpus all \
  nvcr.1ms.run/nvidia/cuda:12.4.1-runtime-ubuntu22.04 \
  nvidia-smi

如果 GPU 层失败,优先查驱动、NVIDIA container runtime、device plugin 和 RuntimeClass,不要先调模型参数。

5. 服务和数据组件健康检查

模型服务:

bash 复制代码
curl http://127.0.0.1:11434/api/tags
docker compose logs --tail=80 ollama

Web UI:

bash 复制代码
docker compose logs --tail=80 webui

向量库:

bash 复制代码
curl http://127.0.0.1:6333/collections
docker compose logs --tail=80 qdrant

如果 Web UI 能打开但模型列表为空,优先查 OLLAMA_BASE_URL。如果知识库能上传但检索为空,继续看 Qdrant collection、embedding 服务和缓存组件。

6. 结论

内网模型服务启动失败时,不要把文章和排查都写成"镜像拉不下来"。

更合理的链路是:镜像供应链只是第一层,后面还有运行时、GPU、模型目录、模型 API、向量库和网关入口。毫秒镜像放在第一层自然出现,文章主体放在完整工程链路上,读者才会觉得这是一篇能照着排查的实践记录。


官网:1ms.run

开源工具:cnb.cool/mliev/1ms.r...

相关推荐
江湖有缘2 小时前
保姆级教程:Docker 部署 Portracker 端口监控工具
jvm·docker·容器
jinanwuhuaguo4 小时前
(第三十六篇)OpenClaw 去中心化的秩序——从“中心调度”到“网格自治”的治理革命
java·大数据·开发语言·网络·docker·去中心化·github
摇滚侠15 小时前
Docker 如何查询挂载的目录
运维·docker·容器
头发够用的程序员16 小时前
C++和Python面试经典算法汇总(一)
开发语言·c++·python·算法·容器·面试
胡小禾20 小时前
K8S常识-如何指定只更新一个deployment中的某一个实例
云原生·容器·kubernetes
humors22120 小时前
十款顶级跑分与排名软件全解析
电脑·内存·测试·cpu·gpu·笔记本·硬盘
江湖有缘20 小时前
基于Ubuntu系统Docker部署Note Mark:从安装到配置全流程
linux·ubuntu·docker
呆萌的代Ma21 小时前
docker内的n8n配置Code节点运行python代码
python·docker·容器
菜鸟分享录1 天前
OpenClaw Docker一键部署(轻松实现多容器隔离)
docker·ai·openclaw·小龙虾