使用 Docker 部署 Ollama 与 Open WebUI 完整指南

moonjerx
2025-02-22 / 0 评论 / 135 阅读 / 正在检测是否收录...

基于 DeepSeek-R1 模型的本地化部署方案

前言

本文详细介绍如何通过 Docker 快速搭建支持 GPU 加速的 Ollama 服务,并集成 Open WebUI 实现可视化交互界面。方案完整支持:

  • ✅ 多 GPU 并行计算
  • ✅ 模型持久化存储
  • ✅ 企业级权限管理
  • ✅ 中英文双语支持

前置准备

硬件要求

  • NVIDIA 显卡(显存 ≥8GB,推荐 RTX 3060 以上)
  • 内存 ≥16GB
  • 磁盘空间 ≥50GB

软件依赖

# 安装 Docker 和 NVIDIA 容器工具包
sudo apt-get update
sudo apt-get install -y docker.io nvidia-container-toolkit
sudo systemctl restart docker

# 验证 GPU 支持
docker run --rm --gpus all nvidia/cuda:11.8.0-base-ubuntu22.04 nvidia-smi

如果报错:

sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
Hit:1 http://hk.archive.ubuntu.com/ubuntu jammy InRelease
Hit:2 http://hk.archive.ubuntu.com/ubuntu jammy-updates InRelease
Hit:3 http://hk.archive.ubuntu.com/ubuntu jammy-backports InRelease
Hit:4 http://hk.archive.ubuntu.com/ubuntu jammy-security InRelease
Reading package lists... Done
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
E: Unable to locate package nvidia-container-toolkit

你的系统中可能未正确添加 NVIDIA Container Toolkit 的软件源。请按以下步骤操作:

解决方案如下:

  1. 添加 NVIDIA 官方源和密钥
# 安装依赖
sudo apt-get install -y curl

# 添加 GPG 密钥
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -

# 添加仓库(注意系统代号匹配)
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-container-runtime/$distribution/nvidia-container-runtime.list | sudo tee /etc/apt/sources.list.d/nvidia-container-runtime.list

更新并安装

sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit

验证安装

nvidia-ctk --version

常见问题排查:

  • 如果系统代号不匹配(如 Ubuntu 22.04 应为 ubuntu22.04),可手动替换上述命令中的 $distribution
  • 若仍报错,尝试清理缓存:

    sudo rm -rf /var/lib/apt/lists/*
    sudo apt-get update

替代方案(若网络受限):

# 通过 NVIDIA Docker 仓库安装
sudo apt-get install -y nvidia-docker2
sudo systemctl restart docker

部署流程

1. 部署 Ollama 服务

# 创建持久化存储目录
mkdir -p ~/ollama_storage

# 启动 Ollama 容器
docker run -d --name=ollama \
--gpus=all \
--restart unless-stopped \
-p 30037:11434 \
-v /home/$USER/dockerfile/ollama/data:/root/.ollama \
ollama/ollama

# 下载 DeepSeek-R1 模型
docker exec -it ollama ollama run deepseek-r1:7b

如果运行容器报错:

xdboy@xdserver:~$ docker run -d --name=ollama \
--gpus=all \
--restart unless-stopped \
-p 30037:11434 \
-v /home/$USER/dockerfile/ollama/data:/root/.ollama \
ollama/ollama
Unable to find image 'ollama/ollama:latest' locally
latest: Pulling from ollama/ollama
d9802f032d67: Pull complete
161508c220d5: Pull complete
6b78c8d09c74: Pull complete
e0c387d586cc: Pull complete
Digest: sha256:82956f40bb1f307c77f7a8c3ed91c7a37e072ed757ff143e34210a7b991b9480
Status: Downloaded newer image for ollama/ollama:latest
78a836df1c7ce1436b41b2d08e9d74764ae732fb06257308430ac9488ad8102d
docker: Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error during container init: error running hook #0: error running hook: exit status 1, stdout: , stderr: Auto-detected mode as 'legacy'
nvidia-container-cli: initialization error: load library failed: libnvidia-ml.so.1: cannot open shared object file: no such file or directory: unknown.

你遇到的错误 libnvidia-ml.so.1: cannot open shared object file 表明 NVIDIA 容器运行时未能正确加载 GPU 驱动。以下是完整解决方案:


问题原因

  1. NVIDIA 驱动未安装
    Docker 容器需要宿主机已安装 NVIDIA 驱动并通过 nvidia-container-toolkit 暴露给容器。
  2. nvidia-container-toolkit 配置未生效
    即使安装了工具包,Docker 可能未正确绑定 NVIDIA 驱动库。

分步解决方案

1. 确认 NVIDIA 驱动已安装

运行以下命令检查驱动状态:

nvidia-smi  # 应有 GPU 信息输出
  • 若无输出,需先安装 NVIDIA 驱动:

    sudo ubuntu-drivers autoinstall  # 自动安装推荐驱动
    sudo reboot

2. 修复 nvidia-container-toolkit 配置

重新配置 NVIDIA 容器运行时并重启 Docker:

# 确认工具包已安装
sudo apt-get install -y nvidia-container-toolkit

# 重新生成配置
sudo nvidia-ctk runtime configure --runtime=docker

# 重启 Docker 服务
sudo systemctl restart docker

3. 验证容器 GPU 访问

运行测试容器检查 GPU 是否可见:

docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smi
  • 若成功输出 GPU 信息,则配置已修复。

4. 重新运行你的 Ollama 容器

docker run -d --name=ollama \
  --gpus=all \
  --restart unless-stopped \
  -p 30037:11434 \
  -v /home/$USER/dockerfile/ollama/data:/root/.ollama \
  ollama/ollama

常见问题补充

如果仍报错 libnvidia-ml.so.1

  • 强制绑定 NVIDIA 库(显式指定驱动路径):

    docker run -d --name=ollama \
      --gpus=all \
      -v /usr/lib/x86_64-linux-gnu/libnvidia-ml.so.1:/usr/lib/x86_64-linux-gnu/libnvidia-ml.so.1 \
      ollama/ollama

若系统为 WSL2

  • 需在 Windows 宿主机安装 NVIDIA 驱动,并在 WSL2 中启用 GPU 支持:

    # 在 WSL2 中安装驱动兼容层
    sudo apt-get install -y nvidia-cuda-toolkit

关键日志检查

若问题持续,检查 Docker 和 NVIDIA 容器日志:

# Docker 日志
journalctl -u docker.service --since "5 minutes ago"

# NVIDIA 容器日志
nvidia-container-cli -k -d /dev/tty info

2. 部署 Open WebUI

docker run -d \
  --name=open-webui \
  -p 3000:8080 \
  -e OLLAMA_API_BASE_URL=http://host.docker.internal:11434 \
  --add-host=host.docker.internal:host-gateway \
  --restart unless-stopped \
  ghcr.io/open-webui/open-webui:main

配置说明

关键参数解析

参数作用示例值
--gpus=all启用全部 GPU必填
-v ~/ollama_storage模型存储路径可自定义目录
OLLAMA_API_BASE_URLOllama 服务地址保持默认

网络架构示意图

[用户浏览器] <-> [Open WebUI:3000] <-> [Ollama API:11434]
                    ↑                         |
                    └── 模型数据持久化存储 ───┘

验证部署

1. 检查服务状态

docker ps -a | grep -E "ollama|open-webui"

2. 测试 API 接口

curl http://localhost:11434/api/tags
# 应返回包含 deepseek-r1 的模型列表

3. 访问 Web 界面

浏览器打开 http://[服务器IP]:3000,完成注册后:

  1. 点击左下角模型选择器
  2. 选择 deepseek-r1:7b
  3. 开始对话测试

高级配置

多 GPU 分配

docker update ollama --gpus '"device=0,1"'  # 指定使用前两块 GPU

中文支持优化

  1. 登录 Open WebUI
  2. 进入 Settings → Global Settings
  3. 设置 Default Language 为 Chinese (Simplified)

常见问题解决

Q1: 容器启动报错 GPU not found

# 重新配置 NVIDIA 容器
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker

Q2: 模型下载速度慢

# 在 Ollama 容器内配置镜像加速
docker exec -it ollama bash
echo 'OLLAMA_MIRROR="https://mirror.example.com"' >> /etc/ollama.env

Q3: 对话历史丢失

# 检查 Open WebUI 数据卷
docker inspect open-webui | grep "Mounts"

应用场景示例

智能客服集成

import requests

def ask_ai(question):
    response = requests.post(
        "http://localhost:11434/api/generate",
        json={
            "model": "deepseek-r1:7b",
            "prompt": f"作为客服助手回答:{question}",
            "stream": False
        }
    )
    return response.json()["response"]

自动生成 SQL 查询


性能优化建议

  1. 量化部署:使用 GGUF 格式量化模型

    docker exec -it ollama ollama run deepseek-r1:7b-q4
  2. 缓存优化:调整 Ollama 的 OLLAMA_NUM_PARALLEL 环境变量
  3. 负载均衡:部署多个 Ollama 实例并使用 Nginx 分流

总结

本文方案相比传统部署方式具备三大优势:

  1. 快速部署:一行命令完成环境搭建
  2. 资源隔离:Docker 容器保证服务稳定性
  3. 弹性扩展:轻松实现多模型并行服务

建议企业用户在此基础上进一步:

  • 配置 HTTPS 安全访问
  • 集成 LDAP 身份验证
  • 设置自动化备份策略

立即按照本指南部署您的 AI 助手吧!如有问题欢迎在评论区留言讨论。

1

评论 (0)

取消

您的IP: