跳至正文
首页 » Docker Compose 部署 Ollama + Open WebUI:搭建私人 AI 助手

Docker Compose 部署 Ollama + Open WebUI:搭建私人 AI 助手

  • Docker

本文教你使用 Docker Compose 一键部署 Ollama + Open WebUI,搭建属于你自己的私有 AI 助手。包含完整配置、常用命令、GPU 加速及常见问题解答,10 分钟即可拥有数据完全可控的本地大模型服务。

为什么选择 Docker Compose?

Docker Run vs. Docker Compose

操作传统 docker runDocker Compose✅
启动 Ollamadocker run -d --name ollama -p 11434:11434 -v ollama_data:/root/.ollama ollama/ollama写入 YAML 文件
启动 WebUIdocker run -d --name open-webui -p 3000:8080 -e OLLAMA_BASE_URL=http://ollama:11434 ghcr.io/open-webui/open-webui写入 YAML 文件
重启服务分别重启两个容器docker compose restart
查看日志分别查看docker compose logs -f
迁移部署重新输入所有命令复制一个文件即可

核心理念:基础设施即代码(Infrastructure as Code)

准备工作

系统要求

  • 操作系统:Linux(Ubuntu 20.04/22.04/24.04)、macOS、Windows WSL2

  • Docker:版本 20.10+

  • 硬件:至少 8GB 内存,建议 16GB(运行 7B 模型)

安装 Docker

如果还没安装 Docker,执行以下命令:

# Ubuntu/Debian
curl -fsSL https://get.docker.com | sudo sh
sudo usermod -aG docker $USER
newgrp docker

#验证安装
docker --version
docker compose version

第一步:创建配置文件

1. 创建项目目录, 创建 docker-compose.yml

mkdir -p ~/ollama-webui
cd ~/ollama-webui

nano docker-compose.yml
📋
docker-compose.yml
Copy to clipboard
services:
  # Ollama 服务 - 大模型推理引擎
  ollama:
    image: ollama/ollama:latest
    container_name: ollama
    restart: unless-stopped
    ports:
      - "11434:11434"
    volumes:
      - ollama_data:/root/.ollama
    environment:
      - OLLAMA_HOST=0.0.0.0
    # 如果要用 GPU
    deploy:
       resources:
         reservations:
           devices:
             - driver: nvidia
               count: all
               capabilities: [gpu]

  # Open WebUI - 网页对话界面
  open-webui:
    image: ghcr.io/open-webui/open-webui:main
    container_name: open-webui
    restart: unless-stopped
    ports:
      - "3000:8080"
    volumes:
      - webui_data:/app/backend/data
    environment:
      - OLLAMA_BASE_URL=http://ollama:11434
    depends_on:
      - ollama

# ============================================================
  # 3. ComfyUI - AI 图像生成工作流
  # ============================================================
  comfyui:
    # 使用 yanwk/comfyui-boot 镜像,支持 GPU 且内置常用插件
    image: yanwk/comfyui-boot:cu128-slim   # CUDA 12.8 支持大部分 NVIDIA GPU[citation:10]
    container_name: comfyui
    restart: unless-stopped
    ports:
      - "8188:8188"                       # ComfyUI Web 界面端口
    volumes:
      # ComfyUI 应用数据(自定义节点等)[citation:4][citation:7]
      - comfyui_storage:/root
      # 模型文件目录(与 Open WebUI Starter 项目结构一致)[citation:2][citation:5]
      - comfyui_models:/root/ComfyUI/models
      # 输出图像目录[citation:1]
      - comfyui_output:/root/ComfyUI/output
      # 输入图像目录(用于 img2img)[citation:1]
      - comfyui_input:/root/ComfyUI/input
    environment:
      - CLI_ARGS=--listen 0.0.0.0 --port 8188  # 允许外部访问[citation:1]
      # GPU 相关环境变量[citation:7]
      - NVIDIA_VISIBLE_DEVICES=all
      - CUDA_VISIBLE_DEVICES=0
    # GPU 支持
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]
    depends_on: []  # ComfyUI 不依赖其他服务,可独立启动

# 声明数据卷(数据会持久化
volumes:
  ollama_data:
    external: true         # 改为false则自动创建卷
    name: ollama-data      # 使用你已有的 ollama-data 卷
  webui_data:
    external: true         # 改为false则自动创建卷
    name: open-webui-data  # 使用你已有的 open-webui-data 卷
# ComfyUI 数据卷(新建)
  comfyui_storage:
    name: comfyui_storage
  comfyui_models:
    name: comfyui_models
  comfyui_output:
    name: comfyui_output
  comfyui_input:
    name: comfyui_input

💡 小贴士:服务名 ollama 可以作为主机名在容器间通信,所以 Open WebUI 用 http://ollama:11434 就能访问 Ollama。

第二步:一键启动

# 在 ~/ollama-webui 目录下执行
administrator@Newt:~/ollama-webui$ docker compose up -d

#你会看到类似输出
[+] up 2/2
 ✔ Container ollama     Running                                                                  0.0s
 ✔ Container open-webui Running                                                                  0.0s
Attaching to ollama, open-webui
open-webui  | 2026-05-05 11:17:27.364 | INFO     | uvicorn.protocols.http.httptools_impl:send:483 - 198.176.56.19:38933 - "GET /_app/version.json HTTP/1.1" 200

#查看运行状态
docker compose ps

第三步:下载 AI 模型

# 下载 DeepSeek-R1 7B 模型(约 4.7GB,需耐心等待)
docker exec -it ollama ollama pull deepseek-r1:7b

# 或者下载更小的版本(内存不足时推荐)
docker exec -it ollama ollama pull deepseek-r1:1.5b

第四步:开始使用

访问 Web 界面, 在浏览器打开:http://你的服务器IP:3000

首次使用注意:

  1. 注册账号:填写任意邮箱和密码(本地账号,不会验证)

  2. 登录:进入对话界面

  3. 选择模型:左上角下拉菜单选择 deepseek-r1:7b

  4. 开始对话:输入问题,享受你的私有 AI 助手!

命令行测试(可选)

# 直接对话
docker exec -it ollama ollama run deepseek-r1:7b

# API 测试
curl http://localhost:11434/api/generate -d '{
  "model": "deepseek-r1:7b",
  "prompt": "你好,请介绍自己",
  "stream": false
}'

Docker Compose 常用命令速查

基础操作

命令 说明
docker compose up -d 后台启动所有服务
docker compose down 停止并删除容器(数据卷保留)
docker compose down -v ⚠️ 停止并删除容器 + 数据卷(会丢失模型!)
docker compose restart 重启所有服务
docker compose stop 停止所有服务
docker compose start 启动已停止的服务

查看状态

命令 说明
docker compose ps 查看容器状态
docker compose logs 查看所有日志
docker compose logs -f 实时跟踪日志
docker compose logs ollama 查看特定服务日志

容器操作

命令 说明
docker compose exec ollama ollama list 在容器内执行命令
docker compose exec ollama bash 进入容器 shell
docker compose port open-webui 8080 查看端口映射
docker rm -f ollama open-webui 删除旧容器(数据卷保留)

镜像管理

命令 说明
docker compose pull 拉取最新镜像
docker compose up -d --build 重建并启动
docker compose down --rmi all 删除容器并移除镜像

数据卷管理

命令 说明
docker volume ls 查看所有数据卷
docker volume inspect ollama_data 查看数据卷详情
docker volume prune 删除未使用的数据卷(⚠️ 会丢失数据)

资源监控

命令 说明
docker stats 查看容器资源使用
docker system df 查看 Docker 磁盘占用
docker system df -v 详细信息

常见问题解答

Q1: 端口被占用怎么办?

# 查看端口占用
sudo lsof -i :3000
sudo lsof -i :11434

# 修改 docker-compose.yml 中的端口映射
ports:
  - "3001:8080"  # 改为其他端口

Q2: 容器启动后立即退出?

# 查看日志定位问题
docker compose logs ollama
docker compose logs open-webui

Q3: Open WebUI 显示 “Ollama 连接失败”?

# 确保环境变量正确
environment:
  - OLLAMA_BASE_URL=http://ollama:11434  # 注意是服务名,不是 localhost

# 重启服务
docker compose restart

Q4: Compose如何更新到最新版本?

docker compose pull
docker compose up -d --force-recreate

Q5: 如何备份模型和对话记录?

# 备份数据卷
docker run --rm -v ollama_data:/source -v $(pwd):/backup alpine tar czf /backup/ollama_backup.tar.gz -C /source .
docker run --rm -v webui_data:/source -v $(pwd):/backup alpine tar czf /backup/webui_backup.tar.gz -C /source 

Q6: 修改为使用指定数据卷

nano docker-compose.yml

#将 volumes 部分修改为:
volumes:
  ollama_data:
    external: true
    name: ollama-data      # 使用你已有的 ollama-data 卷
  webui_data:
    external: true
    name: open-webui-data  # 使用你已有的 open-webui-data 卷

项目文件结构

~/ollama-webui/
├── docker-compose.yml          # Compose 配置文件

数据卷存储在 Docker 管理目录:

/var/lib/docker/volumes/
├── ollama_data/                # 模型文件(5GB+)
└── webui_data/                 # 对话记录、用户配置

总结

通过 Docker Compose,你只用维护一个 docker-compose.yml 文件,就能:

  • ✅ 一键部署docker compose up -d 启动整个 AI 应用栈

  • ✅ 数据持久化:模型和对话记录独立于容器,删除容器不丢数据

  • ✅ 轻松迁移:复制 YAML 文件到新服务器,一条命令恢复服务

  • ✅ 团队协作:配置文件可版本控制,分享即部署

现在,你拥有了一个完全私有的 AI 助手——数据不上云,永久免费,随时可用!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注