内网大模型环境恢复体检:Docker、GPU、向量库和网关排查
一、环境背景
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 pull、crictl pull |
| 容器运行时 | Docker、containerd、磁盘 | docker info、crictl info、df -h |
| GPU 基础环境 | 驱动、CUDA、device plugin | nvidia-smi、kubectl describe node |
| 模型目录 | volume、PVC、权限 | ls -lh、docker compose exec |
| 模型服务 | Ollama/vLLM API | curl /api/tags、服务日志 |
| 数据组件 | Qdrant、Redis、PostgreSQL | curl /collections、redis-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。
九、推荐排查顺序
- 镜像供应链:所有基础镜像是否能拉。
- 容器运行时:Docker 和 containerd 是否配置一致。
- GPU 基础环境:CUDA runtime、device plugin 是否正常。
- 模型目录:volume、PVC、权限、缓存是否正确。
- 模型服务:Ollama/vLLM API 是否可访问。
- 数据组件:Qdrant、Redis、PostgreSQL 是否健康。
- 网关入口:Ingress、反向代理、内网域名、鉴权是否正常。
十、总结
内网大模型环境恢复失败时,镜像拉取只是第一层。
更完整的做法是把环境拆成供应链、运行时、GPU、模型目录、服务连通、数据组件和网关入口。毫秒镜像适合放在第一层,先把多源镜像入口稳定下来;后面的排查再回到模型、向量库和网关本身。
这样写和这样排查都更接近真实工程场景。
官网:https://1ms.run
开源工具:https://cnb.cool/mliev/1ms.run/1ms-helper
更多推荐



所有评论(0)