一、环境背景

2026 年 5 月 6 日,五一假期结束后恢复一个内网大模型演示环境。

组件大致如下:

组件 用途
Ollama / vLLM 模型服务
Open WebUI Web 交互界面
Qdrant 向量库
Redis / PostgreSQL 缓存、会话、元数据
NVIDIA CUDA runtime GPU 基础运行环境
Kubernetes 后续部署到测试集群
Ingress / 反向代理 内网访问入口

一开始执行:

docker compose up -d

可能会遇到几类现象:

open-webui Pulling
context deadline exceeded
nvidia-smi: command not found
connection refused: http://ollama:11434
ImagePullBackOff

这些问题不能都归到“模型起不来”。建议按层体检:镜像、运行时、GPU、模型目录、服务连通、向量库、网关。

二、先做分层表

层级 检查对象 常用命令
镜像供应链 Docker Hub、GHCR、NVIDIA、K8s docker pullcrictl pull
容器运行时 Docker、containerd、磁盘 docker infocrictl infodf -h
GPU 基础环境 驱动、CUDA、device plugin nvidia-smikubectl describe node
模型目录 volume、PVC、权限 ls -lhdocker compose exec
模型服务 Ollama/vLLM API curl /api/tags、服务日志
数据组件 Qdrant、Redis、PostgreSQL curl /collectionsredis-cli ping
访问入口 Ingress、反向代理、域名 curl -I、网关日志

这样拆完以后,排查会比直接翻模型日志清楚很多。

三、镜像供应链:只作为第一层

先从 docker-compose.yml、Helm values、K8s YAML 里整理镜像清单:

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 docker.1ms.run/postgres:16-alpine
docker pull nvcr.1ms.run/nvidia/cuda:12.4.1-runtime-ubuntu22.04
docker pull k8s.1ms.run/pause:3.10

毫秒镜像(1ms.run)在这里解决的是多源镜像入口问题。它不替代模型框架、GPU 驱动、向量库或网关;它适合放在部署前第一层,把 Docker Hub、GHCR、NVIDIA、K8s 等来源先验证一遍。

如果这一层失败,后面的模型目录、RAG、网关暂时不用看。

四、compose 配置示例

下面是一个简化的 docker-compose.yml

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
    ports:
      - "6379:6379"

验证配置和启动:

docker compose config
docker compose pull
docker compose up -d
docker compose ps

五、运行时:Docker 和 containerd 分开查

部署机上先看 Docker:

docker info
docker compose ps
docker system df
df -h

如果上 Kubernetes,再到节点看 containerd:

crictl info
crictl pull docker.1ms.run/ollama/ollama:latest
crictl pull ghcr.1ms.run/open-webui/open-webui:main
crictl pull k8s.1ms.run/pause:3.10
crictl images | grep -E "ollama|open-webui|pause"
journalctl -u containerd --since "30 min ago"

本机 Docker 能跑,不代表节点 containerd 一定能跑。这里重点看 DNS、镜像入口、代理、私有仓库凭证和磁盘。

六、GPU 基础环境

GPU 环境不要等模型服务启动后再看。先用 CUDA runtime 做最小验证:

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

Kubernetes 节点侧:

kubectl describe node gpu-node-01
kubectl get pod -A | grep -E "nvidia|gpu"
kubectl get events -A --sort-by=.lastTimestamp | tail -n 30

如果这里不通,优先查驱动、NVIDIA container runtime、device plugin、节点标签和 RuntimeClass。不要先调模型参数。

七、模型目录和权限

容器起来以后,检查模型目录:

ls -lh ./ollama
docker compose exec ollama ls -lh /root/.ollama
docker compose logs --tail=80 ollama

常见问题:

问题 处理方向
宿主机有模型,容器里没有 检查 volume 路径
容器里无权限读取 检查 UID/GID 和目录权限
K8s 中模型目录为空 检查 PVC 绑定和挂载路径
模型反复下载 检查缓存目录是否持久化

八、Web UI、向量库和网关

服务之间连通再做一轮:

curl http://127.0.0.1:11434/api/tags
curl http://127.0.0.1:6333/collections
docker compose logs --tail=80 webui
docker compose logs --tail=80 qdrant

如果 Web UI 能打开但模型列表为空,先看 OLLAMA_BASE_URL。如果知识库上传成功但检索为空,继续看 Qdrant collection、embedding 服务、Redis/PostgreSQL。

网关层可以用:

curl -I http://ai.internal.example.com
kubectl get ingress -A
kubectl describe ingress -n ai ai-webui

这一步主要看内网域名、反向代理、证书、鉴权和跨服务 502。

九、推荐排查顺序

  1. 镜像供应链:所有基础镜像是否能拉。
  2. 容器运行时:Docker 和 containerd 是否配置一致。
  3. GPU 基础环境:CUDA runtime、device plugin 是否正常。
  4. 模型目录:volume、PVC、权限、缓存是否正确。
  5. 模型服务:Ollama/vLLM API 是否可访问。
  6. 数据组件:Qdrant、Redis、PostgreSQL 是否健康。
  7. 网关入口:Ingress、反向代理、内网域名、鉴权是否正常。

十、总结

内网大模型环境恢复失败时,镜像拉取只是第一层。

更完整的做法是把环境拆成供应链、运行时、GPU、模型目录、服务连通、数据组件和网关入口。毫秒镜像适合放在第一层,先把多源镜像入口稳定下来;后面的排查再回到模型、向量库和网关本身。

这样写和这样排查都更接近真实工程场景。


官网:https://1ms.run
开源工具:https://cnb.cool/mliev/1ms.run/1ms-helper

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐