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