本文教你使用 Docker Compose 一键部署 Ollama + Open WebUI,搭建属于你自己的私有 AI 助手。包含完整配置、常用命令、GPU 加速及常见问题解答,10 分钟即可拥有数据完全可控的本地大模型服务。
为什么选择 Docker Compose?
Docker Run vs. Docker Compose
| 操作 | 传统 docker run | Docker Compose✅ |
|---|---|---|
| 启动 Ollama | docker run -d --name ollama -p 11434:11434 -v ollama_data:/root/.ollama ollama/ollama | 写入 YAML 文件 |
| 启动 WebUI | docker 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" # API 端口映射
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" # Web 界面端口
volumes:
- webui_data:/app/backend/data # 用户数据持久化
environment:
- OLLAMA_BASE_URL=http://ollama:11434 # 连接 Ollama
depends_on:
- ollama # 等待 Ollama 启动
# 数据卷声明(数据独立于容器存在)
volumes:
ollama_data: # 存放模型文件
webui_data: # 存放对话记录、用户配置
💡 小贴士:服务名 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
首次使用注意:
注册账号:填写任意邮箱和密码(本地账号,不会验证)
登录:进入对话界面
选择模型:左上角下拉菜单选择
deepseek-r1:7b开始对话:输入问题,享受你的私有 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 助手——数据不上云,永久免费,随时可用!